预解析
函数要先定义后调用不是指代码书写顺序
举个栗子
函数的两种字面量的定义方式:
1
console.log(add()); //1 console在前
function add(no1,no2){
return 1;
}
function add(no1,no2){
return 1;
} //函数声明不加;
console.log(add());// 1 console语句在后
结果都能正常打印1
下面是另外一种字面量定义的方式
2
function声明
console.log(add()); // undefined console语句在前
var add = function(){
return 1;
}; //语句加;
var 赋值表达式
var add = function(){
return 1;
};
console.log(add()); // 1 console语句在后正常
根本原因
浏览器的预解析机制
在全局作用域找到`function var` 这两个关键字
找到function 函数声明会将函数提前定义一遍,已经知道add是什么玩意儿了,
找到var var xx=undefined
直到执行到赋值代码才会改变初始定义的 undefined
默认值。
找到的下面语句
var add = function(){
return 1;
};
只会定义var add = undefined;