片段 1 -> 输出为“b”
if (true) {
x = "b";
function x() {}
}
console.log(x); //b
片段 2 -> 输出为 f x() {}
if (true) {
function x() {}
x = "b";
}
console.log(x); // ƒ x() {}
我知道使用严格模式根本不会影响全局变量,但我想知道当严格模式禁用时
x
如何被分配不同的值。
function
声明一个本地(块范围)变量,x = 'b'
赋值将覆盖该变量。但是,它还会将 function
声明处的局部变量 的值暴露给外部作用域,从而创建块后的
console.log(x)
观察到的全局变量。
将代码转换为更明确的
let
声明会导致
// snippet 1
if (true) {
let _x = function x() {}; // hoisted
_x = "b"; // assigns local _x
x = _x; // where the `function` declaration was
}
console.log(x); // b
和
// snippet 2
if (true) {
let _x = function x() {}; // hoisted
x = _x; // where the `function` declaration was
_x = "b"; // assigns local _x
}
console.log(x); // ƒ x() {}