这几种立即执行函数表达式(IIFE)有什么区别?

发布于 2022-09-02 00:50:38 字数 233 浏览 25 评论 0

今天看到IIFE的几种表达方式,

+ function () {
    //something
}();
(function () {
    //something
})();
(function () {
    //something
}());

这几种表达方式有什么具体的区别吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ぃ双果 2022-09-09 00:50:38

2016.01.20更新 >>

很多同学啊,就是喜欢把简单问题复杂化!所谓立即执行函数,明明一句话就能概括:

就是定义了一个匿名函数,并且立即执行它。

它的好处是只用一次、用完无法再用、形成一个独立作用域(闭包)、不对外部环境造成污染等。

之所以加上各种括号、取反、加减号等稀奇古怪的符号,原因我下文说了,但是并不是为了对函数进行运算啊!谁闲着没事会对一个undefined进行各种奇怪的运算?有什么意义?

所以,讨论那些奇怪的操作符对函数的运算结果就本末倒置了!就把简单问题复杂化了。有空不如研究一下更有用的东西。

原答案 >>

个人觉得并没有什么区别,本来理论上应该是这样的:

function() {}();

但是这样不符合JS的语法规则,JS引擎不会把它当成一个函数表达式加一个括号,在语法分析的时候会报错。

所以,通过加上一个额外操作符的方法,告诉JS引擎这是一个函数表达式。

要非说区别的话就是:第一个附加了一个一元+操作符;后两个都是附加了分组运算符(),也就是圆括号,只是加的位置不同。

当然还有更多形式,其实除了加的操作不同外,并没有什么区别。因为你的根本目的是为了构造一个匿名函数并且立即执行它。

So尛奶瓶 2022-09-09 00:50:38

都是IIFE,没有什么大的区别。
但是,当有返回值有区别:

(function() {
  return true;
})(); // 返回true

!function () {
    return true;
}(); // 返回false

当函数没有return语句的时候,默认返回undefined,也会有返回值的差异:

!function(){}();  // => true
~function(){}(); // => -1
+function(){}(); // => NaN
-function(){}();  // => NaN
白况 2022-09-09 00:50:38

基本同意 @LionKissDeer 的回答~

更多补充可以参见 葵中剑@剑空 的BLOG:http://swordair.com/function-and-exclamation-mark/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文