新的与否的Javascript

J.W*_*.W. 6 javascript

我有以下功能

var myInstance =  (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function () {
    }
  };
})();
Run Code Online (Sandbox Code Playgroud)

如果我在函数中添加新内容,会有什么不同.从萤火虫看来,似乎两个物体是相同的.据我了解,两者都应该强制执行单身模式.

var myInstance =  new (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function () {
    }
  };
})();
Run Code Online (Sandbox Code Playgroud)

Din*_*one 8

虽然最终结果看起来是相同的,但它如何到达以及它执行的内容是不同的.

第一个版本thiswindow对象的上下文中执行匿名函数.第二个版本执行匿名函数,但是this在新的空对象的上下文中.

最后,他们都返回另一个对象(你的单身人士).这只是执行环境的一个细微差别.

要测试这个,但alert(this);在声明privateVar变量之前的权利.

@Tom Squires:这不一定是真的,并且很难不宣布你的变量.带有该"use strict";指令的脚本会导致JS引擎抱怨(假设引擎支持"use strict";