我和IIFE一起玩,我很困惑。 a
的价值是undefined
,但b
不是。为什么我能够在IIFE之外访问b
的值?
(function(){
var a = b = 3;
})();
console.log("a defined? " + (typeof a !== 'undefined')); // false
console.log("b defined? " + (typeof b !== 'undefined')); // true
声明语法可能会令人困惑,因为它看起来像普通表达式的语法。然而,它是不同的。
var a = b = 3;
被解析为
var a = (something);
在这种情况下,something
是b = 3
,所以它就像你的函数看起来像
b = 3;
var a = b;
没有b = 3
或var
或let
的“裸体”const
创建了一个隐含的全局变量。因此b
在函数外是可见的,而a
则不是。
在JavaScript中声明变量有四种方法:
var
,它将该变量范围限定为声明函数。let
在本声明中,我们在函数范围内使用const
的值声明var a = b = 3;
。表达式a
的值为3,但也隐含地声明了变量b = 3
,这意味着b = 3
将在全局范围内声明。
在函数之外,声明变量b
(因为它是全局隐式声明的)而b
不是(因为它仅在函数的范围内声明)。
你应该避免使用隐式声明的变量(并且最好使用b
和a
而不是let
),所以上面的代码应该是这样编写的:
const
或者,如果您确实希望在函数外部声明变量:
var