JavaScript的变量提升

变量提升

  • demo
var v = "hello world";
  (function (){
    console.log(v);
    var v = "hi";
})()  //undefined
//相当于
var v = "hello world";
  (function (){
    var v;
    console.log(v);
    v = "hi";
})()

var的变量提升只是定义提升至最前,变量的赋值不会提升

创建函数的有两种方式

  • 函数声明function f(){}
function test(){
    foo();
    function foo(){
      console.log("hello");
    } 
}
test();   //"hello"
  • 定义一个变量var f = function (){}
function test(){
    foo();
    var foo = function foo(){
      console.log("hello");
    }
}
test(); // foo is not a function
//相当于
function test(){
    var foo;
    foo();
    foo = function foo(){
      console.log("hello");
    }
}
test(); 
  • 函数本身也是一种变量,所以也存在提升,函数声明的方式是提升了整个函数,所以可以正确执行,定义变量的方式,并没有提升整个函数,所以会报错

参考文章推荐
Javascript作用域和变量提升

你可能感兴趣的:(JavaScript的变量提升)