我将一个函数作为参数传递给IIFE中的构造函数。我意识到IIFE的外部功能将被执行,但似乎也会执行函数参数。我不明白为什么,我想知道如何解决这个问题。以下是两个例子:
var Foo = function(bar) {
this.bar = bar;
};
new Foo(function() { console.log("test"); });
在上面的例子中,事情正如我所期待的那样起作用。匿名函数作为参数传递给Foo构造函数,但不会运行。
这是另一个例子,它显示了在IIFE中创建的匿名函数被执行,即使没有明确调用它:
(function() {
var Foo = function(bar) {
this.bar = bar;
};
Foo.STATIC_FIELD = new Foo(new function() { console.log("test"); });
return Foo;
})();
在第二个例子中," test"写入控制台。我正在使用IIFE保护全局名称空间免受Foo污染。但是,我不希望立即执行传递给Foo构造函数的函数。它是我保留的一个函数,以便稍后可以使用Foo.STATIC_FIELD.bar()调用它。实现这一目标的最佳途径是什么?
答案 0 :(得分:-2)
Mike C和DavidS的评论充分回答了我的问题。如果要存储函数以供以后调用,请不要使用“new”,因为这将运行该函数。稍后,请确保在该函数上调用“call”,并保留该对象的上下文。例如:
foo.myFunction.call(foo);