naro

您所在的位置:首页 > 解决方案 > 其他 > 正文
先有鸡还是先有蛋,函数声明提升原理 发表时间:2018-05-13 12:23:55 点击:
导言:直觉上认为Js代码在执行时是从上到下一行一行执行的,但这并不尽然,有一种特殊情况会导致这个假设是错误的,一下来看这个例子。
a = 2;
var a;
console.log(a);

很多开发者会以为输出的是undefined,因为var a声明在赋值之后,自然而然认为变量被重新赋值了,但真正的输出结果是2。


另外,这种情况输出会是什么呢

console.log(a);
var a = 2;

介于第一个demo被坑过,很多开发者会认为输出是2,但真正的输出结果是undefined。


根据以上两个demo的演示,到底发生了什么?这其实可以引申为一个现有鸡还是先有蛋的问题,也就是到底是声明(蛋)在前,还是赋值(鸡)在前?

其实包括变量和函数在内的所有声明都会在任何代码执行前首先被处理,var a=2,其实可以分解成var a;和a=2;两个阶段来看:第一个定义声明实在编译阶段进行,第二个赋值会被留在原地等待执行。

这个过程就好像变量和函数的声明会从他们在代码中的位置“移动”到最上面,这个过程就叫做提升

只有声明本身会被提升,而赋值和其它运行逻辑会留在原地


那么根据这个思路我们再来剖析转换下两个demo就一目了然了:

demo1

var a;
a = 2;
console.log(a); //2

    

demo2

var a;
console.log(a); //undefined
a = 2;


解决方案

开发过程中解决问题的思路和方法

作品锦集

项目案例及设计作品

心路历程

散文、日志、记录及其他