声明前后的JavaScript变量?

萨钦·班达里(Sachin Bhandari)
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

代码疯子

您可以这样理解,代码执行分为两个阶段

  1. Creation phase
  2. 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章