匿名函数调用返回对象之前的"新"

Ben*_*aum 10 javascript

我正在阅读KnockoutJS源代码.

我遇到了以下一行,我不确定我理解......

ko.utils = new (function () {
Run Code Online (Sandbox Code Playgroud)

一般来说,结构似乎是这样的:

ko.utils = new (function () {

   // some variables declared with var

   return {
        export:value,
        export:value
   };

})();
Run Code Online (Sandbox Code Playgroud)

我不明白这个结构,为什么new需要?它有什么作用?它有用的是什么?

(我认为如果函数new在其名称之前调用它作为构造函数调用,并且如果它返回一个对象,则它与没有调用的函数相同new.)

更新:我在github上问了KnockoutJS团队,这就是我得到的:

我的猜测是史蒂夫只是不知道不需要它.回顾他最初的提交,我看到很多不必要的消息已被删除.

Jan*_*roň 10

它可能是一些阻止this到达全局上下文的模式(不是在这种情况下,因为声明了每个变量var,但作者可能希望将其用作创建对象的一般模式).

var x = new (function () {
   this.foo = "bar";
   return {
        // whatever
   };
})();

console.log(foo); // Uncaught ReferenceError: foo is not defined 

var x = (function () { // without new
   this.foo = "bar";
   return {
        // whatever
   };
})();

console.log(foo); // "bar"
Run Code Online (Sandbox Code Playgroud)