变量提升和重名问题

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

  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
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容