JavaScript 函数声明与函数表达式的区别

作者:木棉

时间:2026-10-29

浏览:452

本文详细解析JavaScript中函数声明与函数表达式的核心区别。重点阐述函数声明提升(Hoisting)机制,说明为何函数声明可在定义前调用,而函数表达式需等待赋值语句执行。通过对比代码示例,揭示变量未初始化时的引用错误,并指出Safari浏览器对特定语法的支持问题。

文章目录

函数声明与函数表达式的执行差异

此前我们未严格区分函数声明与函数表达式,但解析器在处理数据加载至执行环境时,对两者采取不同策略。解析器优先读取函数声明,确保其在任何代码执行前即可被访问;而函数表达式则需等待解析器执行至所在代码行时才进行解释执行。示例如下:

代码如下:

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

函数声明提升机制

上述代码可正常运行,原因在于代码执行前,解析器已通过函数声明提升(function declaration hoisting)机制,将函数声明添加至执行环境。JavaScript引擎在首次遍历代码时,会声明函数并将其置于源代码树顶部。因此,即便函数定义位于调用语句之后,引擎仍能将其提升至顶部处理。若将上述函数声明改为等价的函数表达式,执行时将报错。

代码如下:

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

函数表达式的执行错误分析

上述代码运行时会报错,因为函数位于初始化语句中而非函数声明。换言之,在函数所在语句执行前,变量sum中并不保存对函数的引用;且由于第一行代码会引发“unexpected identifier”(意外标识符)错误,后续代码实际上无法执行。

除声明时通过变量访问函数的区别外,函数声明与函数表达式在语法上等价。

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

以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章