JavaScript变量提升和重名问题

本文共有777个字。 # 变量提升/ a

函数表达式声明也认为一种特殊的变量声明,函数直接声明才拥有函数提升

  1. 函数提升优于变量提升执行
  2. 变量提升只提升声明,函数提升声明和赋值
  3. 变量声明不会覆盖变量或函数的赋值
  4. 函数声明会覆盖同名的变量声明和函数赋值,但不会覆盖变量赋值!
  5. 立即执行函数(IIFE)中存在局部作用域,变量只会提升到函数内的顶部
function fn(){
    console.log(1)
}
fn();//2
var fn=100;
function fn(){
    console.log(2)
}
var a = 3;
function a(){};
console.log(a);  //3

console.log(a);  //function a(){}
var a = 3;
function a(){};
//相当于执行了如下代码:
function a() {};
var a;
console.log(a);
a = 3;

同时存在两种函数赋值时,由于函数优先提升后被表达式赋值复写,因此执行表达式赋值。

// 函数表达式
var f = function() {
      console.log(1);
}

// 直接声明
function f (){
     console.log(2);
}

f();// 1

作者:李霖弢
链接:https://www.jianshu.com/p/d16bbe285938
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。

添加新评论

暂无评论