众所周知,函数的声明有三种:
1 . 函数声明语法定义:
function sum(a,b) {
return a+b
}
2 . 函数表达式定义:
var sum=function (a,b) {
return a+b;
}
3 . 使用Function构造函数定义
var sum=new Function("num1","num2","return num1+num2")
而第三种方法由于会导致两次解析是不推荐的。
- 当解析器想执行环境中加载数据时,会率先读取函数声明,进行函数声明提升,所以想下面的代码是可以得到结果的:
console.log(sum(10,10)) //20
function sum(a,b) {
return a+b
}
- 而在函数表达式中,在执行到sum函数之前,变量sum不会保存对函数的引用,也就根本不会执行到sum函数这一行:
console.log(sum(10,20)); //sum is not a function
var sum=function (a,b) {
return a+b;
}
总结,就是只有函数声明才会存在函数声明提升的效果