在下面的示例中,JavaScript 似乎完全忽略了我的return
声明,只是继续执行代码。
var x = 1;
(function() {
x = 2;
return;
var x = 3;
})();
console.log(x); // Outputs 1 in both Chrome and FF
当然代码应该输出2
?如果我从中删除var
关键字var x = 3
,它会2
按预期输出。这里有一些奇怪的编译器优化吗?
在下面的示例中,JavaScript 似乎完全忽略了我的return
声明,只是继续执行代码。
var x = 1;
(function() {
x = 2;
return;
var x = 3;
})();
console.log(x); // Outputs 1 in both Chrome and FF
当然代码应该输出2
?如果我从中删除var
关键字var x = 3
,它会2
按预期输出。这里有一些奇怪的编译器优化吗?
不,代码不应该输出 2 因为变量声明被提升所以你的代码相当于
var x = 1;
(function() {
var x;
x = 2; // changes the internal x variable
return;
x = 3; // does nothing because it's not reached
})();
console.log(x); // Outputs the outside x, which is still 1
线
x = 2;
仅更改x
遮蔽外部变量的内部变量。
非全局变量的作用域是声明它的整个函数。从这个函数的开始到结束。