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
谁能解释一下这段代码是如何产生注释输出的?
最佳答案
重要的事情要记住
任何用
var
声明的变量,在控件到达定义它的行之前都将是undefined
,除非分配了其他内容。这是因为,在 JavaScript 中,declarations are hoisted .任何用
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
。这就是您分别获得 undefined
和 10
的原因。
最后一节
console.log(d, 4);
由于在函数内声明的变量在函数外不可用,所以这一行中的 d
将与第 2 行中声明的变量相同。最后分配的值为 8。
关于Javascript 提升自执行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693661/