返回后执行JavaScript代码

时间:2013-07-29 10:09:08

标签: 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中删除var x = 3关键字,则会按预期输出2。这里有一些奇怪的编译器优化吗?

1 个答案:

答案 0 :(得分:8)

不,代码不应输出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变量。

非全局变量的范围是声明它的整个函数。从这个功能的开始到结束。