变量对象

  • 过程:创建arguments-检查function声明创建属性-检查var声明创建属性
  • 函数声明以及var声明的变量对象会发生变量提升,提升到该作用域的最上方

例子(变量提升)

   function test() {
     console.log(a);
     console.log(foo());
     var a = 1;
     function foo() {
         return 2;
     }
  }
  test(); // undefined 1
  • 正确执行顺序
  function test() {
   function foo() {
       return 2;
   }
   var a;
   console.log(a);
   console.log(foo());
   a = 1;
  }
  test();