本文涉及知识点:
1、提升(这里有变量提升和函数提升);
2、js的单线程特性
3、setTimeout函数的执行机制
首先我们来看一下题目,这是一道选择题,有四个选项。
这段代码在具体开始运行的时候,是怎么样呢。(为了语言精确点,我在下面摘抄了《你不知道的JS》中的表述方式。摘抄部分我用引号括起来)
1、提升
(1)Why?(为什么存在提升这么个知识点)
“引擎会在解释JS代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用于将他们关联起来。”
也就是:“包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理”
“比如 var a = 2;
我们执行的时候会以以下形式处理:
var a;
a=2;
”
所以说,你要知道JS代码在运行的时候,有两个阶段,第一个是编译阶段,会有提升,第二阶段是执行阶段,就是表达式的执行。
(2)What (什么是提升)
源代码
console.log(a); //表达式
var a = 2;//变量声明加赋值
在实际处理的过程是:
var a; //变量提升
console.log(a);//其他的表达式按顺序</