首页 » JavaScript » 函数声明与函数表达式

函数声明与函数表达式

解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);而函数表达式则必须等到解析器执行到它所在的代码行,才会真正的被解释执行。来看下面的例子:

alert(sum(10, 10));
function sum(num1, num2) {
    return num1 + num2;
}

以上代码完全可以正常运行。因为在代码开始执行之前,解析器就已经读取函数声明并将其添加到执行环境中了。如果像下面例子所示的,把上面的函数声明改为变量初始化方式,就会在执行期间导致错误:

alert(sum(10, 10));
var sum = function (num1, num2) {
        return num1 + num2;
    };

以上代码之所以会在运行期间产生错误,原因在与函数位于一个初始化语句中,而不是一个函数声明。换句话说,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(以外标识符)错误,实际上不会执行下一行。

除了通过变量访问函数时间不同这一点区别之外,函数声明与函数表达式的语法是等价的。

也可以同时使用函数声明和函数表达式,例如var sum = function sum(){}。不过,这种语法在Safari中会导致错误。

此文章发表在 JavaScript. 将 固定链接 加入收藏.