JavaScript变量、函数提升、作用域

91 阅读1分钟
看代码输出:
var a = 1;
function fn(){
    var a = 2;
    function a(){console.log(3);}
    return a;
    function a(){console.log(4);}
}
var b = fn();
console.log(b);

输出:2

知识点:
  • var 定义的变量以及function 定义的函数都会被提升,并且函数的优先级高于变量。
  • 所以上述代码执行顺序为:
    var a = 1;
    function fn() {
      function a() { console.log(3); }
      function a() { console.log(4); }
      var a = 2;
      return a;
    }
    var b = fn();
    console.log(b); // 2
    
  • 由于函数内部的a使用var声明了,是局部变量,跟外边的全局变量a作用域不同,所以互不影响,因此输出 2