变量范围:
以下代码的输出结果为:
(function() { var a = b = 5;})(); console.log(b); console.log(a); 答案请往下翻
解答:
console.log(b); //5
|
在这个立即执行函数表达式(IIFE)中包括两个赋值操作,其中a使用var关键字进行声明,因此其属于函数内部的局部变量(仅存在于函数中),相反,b被分配到全局命名空间。
另一个需要注意的是,这里没有在函数内部使用严格模式(use strict;)。如果启用了严格模式,代码会在输出b时报错Uncaught ReferenceError: b is not defined,需要记住的是,严格模式要求你显式的引用全局作用域。因此,你需要写成:
1 2 3 4 5 6 | (function() { 'use strict'; var a = window.b = 5;})(); console.log(b); |
本文探讨了JavaScript中变量的作用域问题,特别是立即执行函数表达式(IIFE)中的变量范围。通过具体代码示例解释了为何在IIFE中声明的变量a在外部无法访问,而未声明直接赋值的b却能在全局作用域中被访问。同时介绍了如何在严格模式下正确地声明全局变量。

被折叠的 条评论
为什么被折叠?



