最近有人问我下面的 JavaScript 代码会产生什么结果,正确的答案让我很困惑:
(function () {
var a = b = 5;
})();
console.log(b);
我本以为这会打印 undefined
但它实际上打印 5
。
根据我的理解,IIFE(立即调用函数表达式)中定义的所有变量在其范围之外都不应该可见。这些变量声明的顺序究竟如何使 b
在其范围之外可见,而 a
在其范围之外不可见?
最佳答案
这个:
var a = b = 5;
相当于:
b = 5;
var a = b;
不
var b = 5;
var a = b;
它将 b
创建为全局变量,然后将 b
的值分配给 a
。
严格模式下也是禁止的。始终使用严格模式!
"use strict";
(function () {
var a = b = 5;
})();
console.log(b);
关于IIFE 内声明的 Javascript 链式变量赋值获得全局可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50700527/