JavaScript 匿名函数

1、JavaScript 匿名函数的定义

匿名函数,即没有名称的函数,如下所示:

function () {
    alert('匿名函数');
}

2、JavaScript 匿名函数的执行:利用括号()运算符

function () {
    alert('匿名函数');
}();

虽然理想很美好,但是现实很骨感,原本希望定义完一个匿名函数后让它直接运行。但实际上却报错:

Uncaught SyntaxError: Function statements require a function name

这是因为在 JavaScript 代码被解析时,当遇到 function 关键字时,会默认把它当做是一个函数声明,而不是函数表达式。如果没有把它显视地表达成函数表达式就会报错了,因为函数声明需要一个函数名,而上面的代码中函数没有函数名。如果我们给它一个函数名,然后加上()立即调用,像这样再试一试吧:

function foo() {
    alert('匿名函数');
}(); 

结果依然报错:Uncaught SyntaxError: Unexpected token ')'

这是因为如果是在一个语句后面加上括号,这个括号就变成了一个分组操作符,用来控制运算中的优先级(小括号里的先运算)。所以上述代码等价于:

function foo() {
    alert('匿名函数');
}
();

相当于先声明了一个叫foo的函数,之后进行()内的表达式运算,但是()(分组操作符)内的表达式不能为空,所以报错。

那下面我们一起看看IIFE的写法。IIFE是英文Immediately-invoked function expression的缩写,含义是:立即执行函数。

(function(){
    alert('匿名函数');
}());

这样写代码能过顺利执行不报错,这是因为当解析器对代码进行解析的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明。当然你也可以在function后面加个函数名,不过函数名在这里没有意义,因为整个函数在执行时就立即调用了。

3、JavaScript 匿名函数的返回值

var student = (function () {
    var name = "Tom";
    return name ;
}());

匿名函数的返回值需要在外面加上一个括号。