2016-10-23 80 views
2

为什么是下面的代码1而不是10的结果?为什么函数bar()没有改变这个值,即使有一个return语句。什么在函数中创建函数?

var foo = 1; 
function bar() { 
    foo = 10; 
    return; 

    function foo() {} 
} 

bar(); 
alert(foo); 

回答

3

这是因为function定义提升到其范围的顶部here,所以里面bar() foo的分配实际上是指有一个空的身体局部功能。

你可以阅读更多关于这个here

3

这是因为在编译内barbar顶部移动foo函数声明。像这样

var foo = 1; 
function bar() { 
    function foo() {} 
    foo = 10; 
    return; 
} 

bar(); 
alert(foo); 

阅读关于hoisting in JS。 与“VAR提升”部分