首页 > 代码库 > JavaScript变量提升

JavaScript变量提升

一、问题:

window.onload=function(){
  var bar=1;
  function test(){
    console.log(bar);
  }
  test();
};

结果为1

window.onload=function(){
  var bar=1; 
  function test(){ 
    console.log(bar); 

    var bar=2;
    console.log(bar);

  } 
  test();
};

结果为 undefined 2

二、作用域链:

当在在函数内部要访问一个变量的时候,首先查找自己的内部作用域有没有这个变量,如果没有就到这个对象的原型对象中去查找,还是没有的话,就到该作用域所在的作用域中找,直到到window所在的作用域

三、JavaScript变量提升

虽然变量bar的定义在后面,不过浏览器在解析的时候,会把变量的定义放到最前面,上面的test函数相当于

      function test(){  

var bar;  

console.log(bar);   //undefined  

bar=2;    

console.log(bar);   //2

}

四、函数的定义也会到提升到最前面

var foo=function(){  

  console.log(1);

};

function foo(){  

  console.log(2);

}

foo();  //结果为1

上面的代码相当于:

function foo(){  

  console.log(2);

}

var foo;

foo=funciton(){

  console.log(1);

}

foo();   //1

JavaScript变量提升