变量提升和函数表达式

先让我们来看个题,测试以下我们的能力:

var getName = function () { alert (1);};
function getName() { alert (2);}

getName();

大家作出答案了吗?没做出来,不要急,下面我们就一起来分析以下。

变量声明提升

即所有声明变量或声明函数都会被提升到当前函数的顶部。

例如:

console.log(x);
var x;
x=0;

浏览器在执行的时候,js引擎会把声明语句提到最前面,如下:

var x;
console.log(x);
x=0;

函数表达式

var getNamefunction getName都是声明语句,区别在于var getName是函数表达式,而function getName是函数声明。
函数表达式最大的问题在于,会将js会将此代码分为两行执行。

例如:

console.log(x);
var x = 1;
function x(){}

实际执行的代码为,先将var x = 1拆分为var xx = 1两行,然后将var x = 1function x(){}提升至前两行。

所以最终函数声明的x覆盖了变量声明的x,log输出为x函数。

同理,上题的实际执行代码为:

var getName;//只提升变量声明
function getName(){//提升函数声明,覆盖var的声明
    alert|(2);p
}
getName = function(){//最终的赋值再次覆盖function getName声明
    alert(1);
}

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

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,396评论 2 17
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 10,828评论 0 7
  • //如上的代码等同,同理,原题中代码最终执行时的是: functionFoo() { getName= funct...
    善良的大叔阅读 2,325评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,749评论 18 399
  • 作为一家企业,知名度很重要,因此小米也要争上头条。犹记得当年红米1代推出时的口号"做最好的千元机",多少人就是直奔...
    划船不用桨桨桨阅读 1,090评论 0 0

友情链接更多精彩内容