JavaScript中函数的声明和调用是可以不分顺序的
var num=10;
fun();
function fun(){
console.log(num);
var num=20;
}
console.log()中的参数num: undefined;
分析:
javascript是一种解释型脚本语言,即解释一行执行一行(但在此之前还有一个预解析过程)。js代码由浏览器中的解析器解析,但是还有一个预解析的过程,即先找 var 、function 和参数,找到 var 和 function 之后,会把 var 和 function 提前,然后再解析一行执行一行。
解析执行的代码:
var num=10;
fun();
function fun(){
console.log(num);
var num=20;
}
//解析后相当于以下代码
var num;
function fun(){
var num;
console.log(num); //此时的参数num只有声明没有定义,所以就在控制台输出 undefined;
num=20;
}
num=10
fun();
详细分析如下:
一、预解析
1. var num
2. function fun(){
console.log(num);
var num=20;
}
(其中还分为三个①②③小步骤,具体见下文)
二、网页解释一行执行一行,至上向下逐行解析
3. num=10
4. fun()
5. 执行fun(){}函数体
三、函数体中的预解析
2_①. var num
四、函数体中一行一行执行,逐行解析
2_②. console.log(num) // 此时的参数num只有声明没有定义,所以就在控制台输出 undefined;
2_③. num=20
更多了解 JavaScript预解析内容:JavaScript预解析