2013-07-29 90 views
4

在下面的示例中,JavaScript似乎完全忽略了我的return语句,并且只是执行代码。返回后执行的JavaScript代码

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。这里有一些奇怪的编译器优化工作吗?

+0

我认为'x'在函数内部是不同的。简单的修复就是'window.x = 2' – Madushan

+1

由于@dystroy表示变量声明被提升到函数作用域的顶部。因此,因为你有var x = 3,所以var x get被悬挂在顶端,并使x = 2成为局部变量。如果你只是把x = 3(没有var),那么console.log会输出2 –

回答

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变量,阴影外一。

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