JavaScript 匿名函数有哪几种执行方式

 我来答
匿名用户
2017-03-27
展开全部
作者:长天之云
链接:https://www.zhihu.com/question/20249179/answer/14487857
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

有些人的确会用「自执行的匿名函数」(self-executing anonymous function)这个术语,但是 Ben Alman 推荐了一个更准确的叫法:「立即调用的函数表达式」(IIFE,Immediately-Invoked Function Expression http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife )——虽然更长了点,我喜欢这个术语,缩写漂亮,含义更清晰。@leo shawn 有个地方说错了——“Javascript不允许在函数声明的后面直接使用小括号”。看看 Ben Alman 引用的 Dmitry A. Soshnikov 的例子如下:console.log( typeof f )
function f(){ console.log('called') }(1)
我做了点小修改,你可以尝试运行一下。函数 f 的定义被提升了,但并没有被立即调用——后面一行相当于在花括号闭合后,加入分号断行了。Ben Alman 已经解释得很清楚了,我再复述一下。语法错误的两种原因:1) function (){ }()期望是立即调用一个匿名函数表达式,结果是进行了函数声明,函数声明必须要有标识符做为函数名称。2) function g(){ }()期望是立即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号作为分组运算符,必须要提供表达式做为参数。所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。按照这个理解,可以举出五类,超过十几种的让匿名函数表达式立即调用的写法:( function() {}() );
( function() {} )();
[ function() {}() ];

~ function() {}();
! function() {}();
+ function() {}();
- function() {}();

delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {};

var f = function() {}();

1, function() {}();
1 ^ function() {}();
1 > function() {}();
// ...
另外值得再次注意的是,括号的含混使用——它可以用来执行一个函数,还可以做为分组运算符来对表达式求值。比如使用圆括号或方括号的话,可以在行首加一个分号,避免被用做函数执行或下标运算:g()
// 可能放了几行注释——不知道是用自动化脚本合并的文件,还是哪里拷的函数。
;( function() {}() )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式