最近被问到以下JavaScript代码会产生什么,正确的答案会让我感到困惑:
(function () {
var a = b = 5;
})();
console.log(b);
我原本以为这会打印undefined
,但实际上会打印5
。
根据我的理解,在IIFE(立即调用的函数表达式)中定义的所有变量应该不在其范围之外可见。这些变量声明的排序究竟是如何使b
在其范围之外可见而a
在其范围之外不可见?
答案 0 :(得分:5)
此:
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);
答案 1 :(得分:2)
您的代码与此相同
false
如果声明一个没有(function () {
b = 5;
var a = b;
})();
console.log(b);
的变量,它将是全局变量并分配给var, let or const
对象(在浏览器的JS中),因此可以从任何地方访问它。
答案 2 :(得分:1)
在一个语句中声明多个result.csv
的语法是:
var
您所拥有的是var a, b;
// or:
var a = 5, b = 5;
的声明,但var a
是值表达式的一部分,不受b
的影响,因此泄漏到全局范围。