function a(){
console.log(typeof b); // function
function b() {
var c = 52;
console.log(c);
}
var b = 88;
console.log(typeof b); // number
}
任何人都可以回答,javaScript如何编译或处理这种特殊情况?我知道javaScriptfunction
在谈到时会优先考虑声明hoisting
。但是,identifier
b
在相同的块或相同的词法作用域下,相同的值如何容纳两个不同的值?
有人可能会说喜欢,没关系,我将用b
作为function
它的声明之前和number
分配一个之后number
。
您可以这样理解,代码执行分为两个阶段
Creation phase
Execution phase
创建阶段:-在创建阶段,函数被按原样悬挂在顶部,变量被悬挂但没有赋值(或者您可以说它的值未定义)
执行阶段:-在执行上下文期间,当到达发生分配的行时,它将值分配给变量
因此在creation phase
函数b悬挂期间的代码中,编译器将像这样读取它
function a(){
function b(){
var c = 52;
console.log(c);
}
console.log(typeof b); // function
b = 88;
console.log(typeof b); // number
}
所以当你到达那条线
b = 88
它给b
类型为变量的新值赋值number
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句