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

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

我最近比较了当前版本的json2.js使用我在项目中的版本,我注意到函数表达式是如何创建和自执行的。

用于在圆括号中包装匿名函数并执行它的代码,

(function () {
  // code here})();

但是现在它将自动执行的函数封装在括号中。

(function () {
  // code here}());

在接受的答复中,CMS有一个评论。解释JavaScript封装的匿名函数语法“两者都:(function(){})();(function(){}());是有效的。“

我想知道有什么区别?前者是否通过保留一个全局匿名函数来占用内存?括号应该放在哪里?


慕村225694
浏览 761回答 4
4回答

牧羊人nacy

那样的话没关系。您正在调用第一个定义中解析为函数的表达式,并在第二个示例中定义并立即调用一个函数。它们是相似的,因为第一个示例中的函数表达式只是函数定义。对于调用解析函数的表达式,还有其他更明显有用的情况:(foo || bar)()

墨色风雨

除了语法之外,没有任何不同之处。关于你对第二种方法的关注:考虑:(function namedfunc () { ... }())namedfunc即使您提供了名称,也不会在全局范围内。匿名函数也是如此。在该范围内获得它的唯一方法是将其赋值给父类中的一个变量。((namedfunc = function namedfunc () { ... })())外部父母是不必要的:(namedfunc = function namedfunc () { ... })()但你无论如何都不想要那份全球宣言,对吧?因此,它归结为:(function namedfunc () { ... })()您还可以进一步减少它:名称是不必要的,因为它永远不会被使用(除非您的函数是递归的。)即使那样你也可以用arguments.callee)(function () { ... })()这就是我对它的看法(可能是不正确的,我还没有阅读ECMAScript规范)。希望能帮上忙。
打开App,查看更多内容
随时随地看视频慕课网APP