本文对比 JavaScript 中有名函数(函数声明)与无名函数(函数表达式)的定义方式及调用差异。通过代码示例说明,有名函数支持提升机制,可在定义前调用;而无名函数必须在使用前完成定义,否则会导致引用错误。同时介绍了无名函数的立即执行形式。
JavaScript 有名函数与无名函数的定义对比
首先通过一个具体示例来观察两种函数的定义方式。
代码如下:
function a(){
alert("我是本站");
} 2
代码如下:
var a = function(){
alert("我是本站");
} 无名函数的立即执行形式
上述两种写法在功能上是等价的。其中写法 1 属于有名函数(函数声明),而写法 2 则是将一个匿名函数赋值给变量 a(函数表达式)。在此场景下,两者效果相同。此外,写法 2 允许在函数定义后立即添加括号,从而实现创建完成后立即调用。例如:
var i = function(obj){
alert(obj);
}("我是本站");
调用时机:函数提升与定义顺序
有名函数与无名函数的一个关键区别在于调用时机:有名函数支持提升(Hoisting),允许在定义之前被调用;而无名函数必须在调用之前完成定义。以下是一个使用无名函数时常见的错误示例:
i();
var i = function(){
alert("我是本站");
}
正确的写法应当如下:
var i = function(){
alert("我是本站");
}
i();
或者改用有名函数的形式:
i();
function i(){
alert("我是本站");
}