函数声明与函数表达式
解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行:
javascript
alert(sum(10, 10));
function sum(num1, num2) {
return num1 + num2;
}
在代码开始执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中。
把上面的函数声明改为等价的函数表达式,就会在执行期间导致错误:
javascript
alert(sum(10, 10));
var sum = function (num1, num2) {
return num1 + num2;
};
以上代码之所以会在运行期间产生错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话说,在执行到函数所在的语句之前,变量sum 中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。
也可以同时使用函数声明和函数表达式,例如var sum = function sum(){}。不过,这种语法在Safari 中会导致错误。