本文分析JavaScript中匿名函数直接声明会触发语法错误的原因,并解释使用括号包裹形成函数表达式后为何能成功执行。通过对比代码示例,阐明圆括号在将函数声明转换为函数表达式中的作用,以及自执行匿名函数(IIFE)的基本工作原理。
匿名函数定义与语法错误
匿名函数是指没有指定名称的函数。例如:
代码如下:
function () {
alert('a function');
} 然而,上述代码会导致报错。Firebug 控制台会提示:function statement requires a name,即函数语句必须包含名称。
括号包裹与自执行原理
有趣的是,若使用一对圆括号将无名的函数包裹起来,则不会报错。例如:
代码如下:
(function () {
alert('a function');
}) (注意包裹函数的圆括号!)。尽管这样不会报错,但如何确认该函数是否已成功声明?是否因为根本没有声明所以不报错?我们可以通过让函数自行执行一次来进行测试:
代码如下:
(function () {
alert('a function');
}()) 可以看到,函数成功执行,这表明函数确实存在。
同样,如果此时去掉包裹函数的圆括号,则会再次报出前述错误,且函数无法执行。代码如下:
代码如下:
function () {
alert('a function');
}() 这对包裹函数的圆括号如此重要,其背后的原理是什么?