【发布时间】:2013-07-10 12:15:32
【问题描述】:
有没有区别:
(function(){
}).call(this);
和
(function(){
})();
或
var MODULE = {};
(function(){
this.hello = 'world'
}).call(MODULE);
和
var MODULE = {};
(function(m){
m.hello = 'world'
})(MODULE);
我经常在编译的 javascript 中看到第一种情况。他们都会创建一个范围并做好命名空间的工作。
有什么不同还是只是口味问题。
编辑: 为什么编译好的 javascript 会使用 IIFE 调用?
【问题讨论】:
-
“编译好的 javascript”是什么意思?
-
类似咖啡或钛合金
-
这真的取决于
this在调用时是什么;在大多数情况下不会有任何区别,因为所有代码都由它包装。 -
请注意,函数的 this 关键字与作用域无关,它总是在当前执行上下文中解析,而不是在作用域链上。无论如何,我会使用第二个版本,第一个只是传递对 MODULE 的引用的一种混淆方式。
标签: javascript namespaces scope