JavaScript IIFE 函数和变量作用域
JavaScript IIFE functions and variable scope
正在阅读JavaScript拼图!,我一直在跟进,直到遇到这种情况。
密码
var name = "abc";
(function () {
console.log(name);
var name = "xyz";
console.log(name);
}) ();
returns
undefined
xyz
但是这个
var name = "abc";
(function () {
console.log(name);
}) ();
returns
abc
我很困惑,为什么name
未定义是第一次调用的第一个代码?我猜这是因为 JavaScript 吊装和其他原因。这两段代码有什么不同?
这与您猜想的IIFE, this is just var hoisting无关。如果使用经典函数,您也会遇到同样的情况。
您在 IIFE 中的某处 重新声明 name
这一事实取消了此 IIFE 中 name
的全局范围。所以你第一次在你的 IIFE 中调用 name
时,它的行为是未声明的,因此是 undefined
.
您可以通过注释和取消注释一行来使用这个 fiddle 测试 var 提升 概念。
正在阅读JavaScript拼图!,我一直在跟进,直到遇到这种情况。
密码
var name = "abc";
(function () {
console.log(name);
var name = "xyz";
console.log(name);
}) ();
returns
undefined
xyz
但是这个
var name = "abc";
(function () {
console.log(name);
}) ();
returns
abc
我很困惑,为什么name
未定义是第一次调用的第一个代码?我猜这是因为 JavaScript 吊装和其他原因。这两段代码有什么不同?
这与您猜想的IIFE, this is just var hoisting无关。如果使用经典函数,您也会遇到同样的情况。
您在 IIFE 中的某处 重新声明 name
这一事实取消了此 IIFE 中 name
的全局范围。所以你第一次在你的 IIFE 中调用 name
时,它的行为是未声明的,因此是 undefined
.
您可以通过注释和取消注释一行来使用这个 fiddle 测试 var 提升 概念。