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

自动执行匿名JavaScript函数的括号位置?

自动执行匿名JavaScript函数的括号位置?

慕村225694 2019-06-01 16:23:10
自动执行匿名JavaScript函数的括号位置?我最近比较了当前版本的json2.js使用我在项目中的版本,我注意到函数表达式是如何创建和自执行的。用于在圆括号中包装匿名函数并执行它的代码,(function () {   // code here})();但是现在它将自动执行的函数封装在括号中。(function () {   // code here}());在接受的答复中,CMS有一个评论。解释JavaScript封装的匿名函数语法“两者都:(function(){})();和(function(){}());是有效的。“我想知道有什么区别?前者是否通过保留一个全局匿名函数来占用内存?括号应该放在哪里?
查看完整描述

4 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

那样的话没关系。您正在调用第一个定义中解析为函数的表达式,并在第二个示例中定义并立即调用一个函数。它们是相似的,因为第一个示例中的函数表达式只是函数定义。

对于调用解析函数的表达式,还有其他更明显有用的情况:

(foo || bar)()


查看完整回答
反对 回复 2019-06-01
?
墨色风雨

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

除了语法之外,没有任何不同之处。

关于你对第二种方法的关注:

考虑:

(function namedfunc () { ... }())

namedfunc即使您提供了名称,也不会在全局范围内。匿名函数也是如此。在该范围内获得它的唯一方法是将其赋值给父类中的一个变量。

((namedfunc = function namedfunc () { ... })())

外部父母是不必要的:

(namedfunc = function namedfunc () { ... })()

但你无论如何都不想要那份全球宣言,对吧?

因此,它归结为:

(function namedfunc () { ... })()

您还可以进一步减少它:名称是不必要的,因为它永远不会被使用(除非您的函数是递归的。)即使那样你也可以用arguments.callee)

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

这就是我对它的看法(可能是不正确的,我还没有阅读ECMAScript规范)。希望能帮上忙。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 748 浏览
慕课专栏
更多

添加回答

举报

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