我看过IIFE的写法:
(function() {
console.log("do cool stuff");
})();
也:
(function() {
console.log("do more cool stuff");
}());
它们在我使用过的任何环境中似乎都一样工作,尽管有时我被告知一种方法是正确的,另一种方法是错误的,反之亦然。有没有人有任何坚实的理由或逻辑可以将其写成一个订单而不是另一个订单?在某些情况下,在函数体关闭之后但在调用括号发挥作用之前,或者在最后一个右括号之后但之前,可能会发生更多事情?我主要在 Angular 模块闭包中使用这些,似乎找不到任何真正的理由去一种或另一种方式,想知道是否有人有不同的经验。
简短的回答:没关系,只要你把它们放在那里即可。
长答案:除了箭头函数之外,这并不重要,因为对于 JavaScript 来说,唯一重要的是它们的存在。原因是语言规范定义语句只能以function
关键字如果你声明一个named功能。因此,这样定义 IIFE 是违反规范的:
function () {}();
解决方法是将整个内容括在括号中,这样语句就不会以function
关键字不再。您可以通过使用来实现这一点
(function () {})();
以及使用:
(function () {}());
您选择哪一个完全是任意的,因此取决于您。
我(个人)将括号放在函数周围,而不是调用周围,即像这样:
(function () {})();
原因:我想使用最小的代码部分来包装仅出于技术原因所需的内容,这是函数定义,而不是调用。除此之外,规范说你不能define一个函数以这种方式,它不是关于调用该函数。因此,我认为如果您包装定义而不是调用,会更清楚。
edit但是,对于 es6 中的箭头函数,调用必须在包装器外部。它位于包装器内部会导致调用的左括号出现意外的标记错误。尚不完全清楚为什么会这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)