2016-12-20 49 views
0
function a(){ 
    function b(){ 
    } 
} 

在上面的JavaScript代码中,在提升阶段,函数b会被挂起吗?或者只是a将被悬挂,因为只有功能a在全球范围内词汇坐。关于Javascript混乱的问题

+0

吊装总是发生*每个范围*。 'b'被挂起,但只有在函数作用域内,每当调用'a()'时。 – Bergi

+0

这意味着如果我们不调用'a()','b'不会被挂起? –

+0

这意味着如果不调用'a()',将不会出现'b',并且会有多次调用多次'b's。对于'b',你只能考虑它所在的范围'... {function b(){}} ...'(这是'a'函数体),而不是别的。 – Bergi

回答

3

b将在提升阶段当该函数(a)被调用时位于其出现范围的顶部(由函数主体a定义的范围)。

b将不能出口到全球范围。

+0

非常感谢,这是一个非常清晰的例子。 –

0

声明被悬挂在其包含范围的顶部,对于功能b,其功能是a

功能b将被悬挂到功能a的顶部,但这就是它已经存在的地方。

而且,(根据您的代码)功能a将被提升到全球范围的顶部。

1

函数的一将被提升到全局范围(在全球范围内假设这)和功能B的顶部将被提升到由函数创建的范围的顶部。

0

在吊装过程中的所有声明将向上移动父函数声明如下。

Ex: function fun(){ 
    a = 10; 
    var c = b(); 
    function b(){} 
} 

会变得像

function fun(){ 
var a; 
var c; 
function b(){}; 
a = 10; 
c = b(); 
}