变量提升和重名问题

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

  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

推荐阅读更多精彩内容

  • 前端07班 王语句JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是...
    ea203453e188阅读 559评论 0 4
  • 函数声明和函数表达式有什么区别 (*)解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;函数表达式则必须...
    coolheadedY阅读 176评论 0 1
  • 语句 JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。 ...
    米塔塔阅读 196评论 1 10
  • 一、你是否越学越不会学 碎片化时代,学习的成本很低,但效率却不一定是最高的。 我个人遇到的问题相信很多朋友都遇到过...
    三月行者阅读 479评论 4 11
  • 盐, 调味降温, 让生命的酸甜苦辣与温度,平衡适中 防腐消炎, 让一切毁坏到此为止,不再扩散。 光, 照亮黑暗,看...
    王小鱼先生阅读 270评论 0 1