Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回后执行的JavaScript代码_Javascript - Fatal编程技术网

返回后执行的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

在下面的示例中,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 = 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