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 ;
}());
匿名函数的返回值需要在外面加上一个括号。