变量范围:
以下代码的输出结果为:
(function() { var a = b = 5; })(); console.log(b); console.log(a);
答案请往下翻
解答:
console.log(b); //5 console.log(a); //Error, a is not defined
在这个立即执行函数表达式(IIFE)中包括两个赋值操作,其中a
使用var
关键字进行声明,因此其属于函数内部的局部变量(仅存在于函数中),相反,b
被分配到全局命名空间。
另一个需要注意的是,这里没有在函数内部使用严格模式(use strict
;)。如果启用了严格模式,代码会在输出b时报错Uncaught ReferenceError: b is not defined
,需要记住的是,严格模式要求你显式的引用全局作用域。因此,你需要写成:
(function() { 'use strict'; var a = window.b = 5; })(); console.log(b);