返回后执行的JavaScript代码
在下面的示例中,JavaScript似乎完全忽略了我的返回后执行的JavaScript代码,javascript,Javascript,在下面的示例中,JavaScript似乎完全忽略了我的return语句,而只是继续执行代码 var x = 1; (function() { x = 2; return; var x = 3; })(); console.log(x); // Outputs 1 in both Chrome and FF 代码应该输出2?如果我从var x=3中删除var关键字,它会按预期输出2。这里有一些奇怪的编译器优化吗?没有,代码不应该输出2,因为变量声明被挂起,所以代码相当于 var x
return
语句,而只是继续执行代码
var x = 1;
(function() {
x = 2;
return;
var x = 3;
})();
console.log(x); // Outputs 1 in both Chrome and FF
代码应该输出
2
?如果我从var x=3
中删除var
关键字,它会按预期输出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
变量,该变量会将外部变量隐藏起来
非全局变量的范围是声明它的整个函数。从函数的开始到结束。我认为函数内部的
x
是不同的。。简单的解决方法是执行window.x=2
,因为@dystroy说变量声明被提升到函数范围的顶部。因为变量x=3,所以将变量x提升到顶部,使x=2成为局部变量。如果您只输入x=3(不带var),那么console.log将输出2