Javascript 提升自执行功能

标签 javascript closures hoisting self-executing-function

console.log(d, 1);    // undefined 1
var d = 8;
(function() {
  console.log(d, 2);  // undefined 2
  var d = 10
  console.log(d, 3);  // 10 3
})();
console.log(d, 4);    // 8 4

谁能解释一下这段代码是如何产生注释输出的?

最佳答案

重要的事情要记住

  1. 任何用 var 声明的变量,在控件到达定义它的行之前都将是 undefined,除非分配了其他内容。这是因为,在 JavaScript 中,declarations are hoisted .

  2. 任何用 var 声明的变量,都将限定在定义它的函数内。


有了这个理解,让我们看一下代码。

第一节

console.log(d, 1);
var d = 8;

您在执行声明的d 的行之前访问d。因此,d 将是 undefined

中间部分

(function() {
  console.log(d, 2);
  var d = 10;
  console.log(d, 3);
})();

这里也是一样。您在 d 实际声明之前和之后访问 d。这就是您分别获得 undefined10 的原因。

最后一节

console.log(d, 4);

由于在函数内声明的变量在函数外不可用,所以这一行中的 d 将与第 2 行中声明的变量相同。最后分配的值为 8。

关于Javascript 提升自执行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693661/

相关文章:

javascript - 局部未声明的变量成为全局变量。它们在文档中的什么地方结束了?

JavaScript 多重警报提示

javascript - Dropzone.js 上传进度条无法正常工作

javascript - JS中变量的作用域

javascript-未捕获的语法错误 : Identifier * has already been declared

typescript - 如何将函数参数的类型与某个枚举值关联起来?

javascript - 谷歌 Dartlang 中关闭的奇怪行为

javascript - 带有 svg 图像分层的交互式 WebGL 背景

javascript - 使用 Ajax 和 Jquery 验证提交表单

javascript - jQuery 选择器 - 仅向选定的 id 插入值