在其余编程语言中,都规定必须先声明再使用,例如:编程
var a = 10; // 声明 alert(a); // 调用
但在JS中,咱们发现,以下:编程语言
alert(a); // 使用变量 fn(); // 调用fn函数 var a = 10; // 声明 function fn(){}
为何能够 先使用后声明 呢?函数
主要由于是JS解析与执行过程当中的 **预处理**
JS解析与执行过程分红2部分code
一、全局 (JS一开始解析与执行的地方) 二、函数 (函数调用才开始解析与执行)
全局JS代码执行分为2个阶段 (JS一开始就执行如下2个阶段)io
1. 预处理阶段 2. 执行阶段
预处理主要处理如下2种代码function
一、全局中的函数声明 二、全局中的用var声明的变量
###################### 处理前 alert(a); //undefined fn(); alert(b); //报错,b不是预处理的代码 var a = 10; b = 123; function fn(){} ###################### 处理后 function fn(){} var a; alert(a); //undefined fn(); alert(b); //报错,b不是预处理的代码 a = 10; b = 123;
从上面能够看出,为何JS能够在声明前调用了,还有一点很重要是:预处理的处理顺序:先处理函数,再处理var变量test
函数体内JS代码执行分为2个阶段 (函数调用时,执行如下2个阶段)变量
1. 预处理阶段 2. 执行阶段
预处理主要处理如下3种代码命名
一、函数参数 二、函数中的函数声明 三、函数中的用var声明的变量
函数体内预处理的处理顺序:先处理函数参数,再到函数,最后处理var变量语言
###################### 处理前 function go(a, b){ alert(a) test(); var aa = 10; function test(){} } go(1, true) ###################### 处理后 function go(a, b){ function test(){} var aa; alert(aa) // undefined alert(a) // 1 test(); aa = 10; } go(1, true)