为了账号安全,请及时绑定邮箱和手机立即绑定

(function(){...}())之间有区别吗?和(function(){...})();?

(function(){...}())之间有区别吗?和(function(){...})();?

慕森王 2019-09-03 16:11:48
有时我看到:(function() { ... }()); 有时我看到:(function() { ... })(); 我看到有和没有参数的两种形式。它们都 执行匿名功能。这两种形式有区别吗?是否有任何令人信服的理由使用一种形式而不是另一种形式?
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

这两种形式没有实际区别,但从语法的角度来看,两者之间的区别在于分组算子 - 括号 - 将在第一个例子中保存CallExpression,包括FunctionExpression:


               CallExpression

                | |

       FunctionExpression |

                | |

                VV

    (function(){}());

    ^ ^

    | --PrimaryExpression  -  |


在第二个例子中,我们首先得到一个整体CallExpression,它包含FunctionExpression:


          PrimaryExpression

                |

         FunctionExpression

                |

                V

    (function(){})();

    ^ ^

    |  -  CallExpression  -  |


查看完整回答
反对 回复 2019-09-03
?
杨魅力

TA贡献1811条经验 获得超6个赞

就编译器而言,两者之间没有区别。但是,会发现(function () {}())Douglas Crockford的JavaScript 代码约定中推荐使用该样式。


查看完整回答
反对 回复 2019-09-03
?
Helenr

TA贡献1780条经验 获得超4个赞

就差异而言,它实际上只是语法糖。有点相当于:“你喜欢jQuery()还是$()?” 两者都可以互换地编译,执行和使用(AFAIK)。


从我到目前为止看到的代码示例中,更多人似乎遵循Crockford代码约定:


(function() { ... }()); 

就个人而言,我更喜欢这个(function(){})();惯例,因为我觉得这个功能是自动执行的; 我也是jQuery的大用户,这是jQuery源代码中使用的约定。


此外,无论您选择使用哪种形式,都可以使用parens来封装您的自动执行功能。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信