自执行的匿名函数约定
Self-executing anonymous function conventions
以下两者有什么区别吗?它们都以相同的方式工作吗?
我已经看到了.call()
的某些用例,但我从未看到解释为什么函数调用括号在匿名函数声明内部或之后。
(function() {
}());
^^
(function() {
})();
^^
(function() {
}).call();
前两个是相同的,只是风格不同*;最后一个不同之处在于它使您能够控制 IIFE 中this
的值。 例如
(function(){
this.a = 12;
}).call(foo);
将属性a
添加到对象 foo 中。
*当然,道格拉斯·克罗克福德有偏好
主()
内部或外部的()
位置丝毫不重要。(很多)在另一个问题上进行了更多讨论,但这个问题并没有解决您提出的call
选项。
根据规范,call
至少需要一个参数,因此要与前两个选项大致相同,您需要:
(function() {
}).call(undefined);
。可以肯定的是,某些实现不会因为不提供参数而对你感到遗憾。
我更喜欢第二种方式。JSLint 使用第一种方法。您应该始终将.call()
与参数一起使用,因此第三个变体是错误的。
不过,1 和 2 之间没有区别。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 函数和回调的代码约定
- 在 Node.js 中何时使用同步函数是否有约定
- 自执行的匿名函数约定
- 最好导出一个包含函数的对象,或者只导出ES6中的多个函数(有约定吗?)
- 是否有关于如何用注释记录JavaScript文件的约定?比如函数签名、示例等
- JSHint:函数约定
- JavaScript中构造函数参数的命名约定
- 对象内部函数的JavaScript命名约定
- 构造函数上JavaScript命名约定的ReSharper警告
- JavaScript中没有使用指示函数参数的标准约定
- 避免与函数命名约定冲突
- 创建像getels(id)这样的函数是错误的编码约定吗?
- JavaScript的正确函数约定
- JavaScript函数参数命名约定
- TypeScript中函数或变量的约定是什么
- 帮助程序函数和自创建对象的命名约定
- 编码风格——保存函数的javascript变量是否有命名约定?
- 以美元符号为前缀的公共函数的Javascript命名约定