首页 > 解决方案 > 声明前后的JavaScript变量?

问题描述

function a(){ 
   console.log(typeof b); // function
   function b() {
     var c = 52; 
     console.log(c);
   } 
   var b = 88;  
   console.log(typeof b); // number 
}

谁能回答,javaScript如何编译或处理这种特殊情况?我知道 javaScriptfunctionhoisting. 但是相同的如何identifier b在相同的块或相同的词法范围内保存两个不同的值?

有人可能会说,好吧,我将在它声明之前和分配它之后使用ba 。functionnumbernumber

标签: javascriptfunctionhoisting

解决方案


您可以这样理解代码执行有两个阶段

  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


推荐阅读