立即执行的函数和使用关键字new有什么区别?

时间:2016-03-09 23:56:50

标签: javascript

在我学习 javascript closure 的同时,我在w3schools上遇到了一个示例,该示例使用立即执行的函数为函数提供私有变量:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

但对我来说,所有立即执行的函数都执行正文中的语句,如果我没记错,可以通过关键字 new

来完成

var add = new function () {
    var counter = 0;
    return function () {return counter += 1;}
};

document.write("return" + add()+ "<br>"); // return 1
document.write("return" + add() +"<br>"); // return 2, works the same as the example on w3school

显然更复杂,它创建了一个新对象......但我认为你没有义务使用该对象(最后添加一个return语句)。

我的问题是:立即执行的功能可以做些什么,而新关键字却无法做到?或者你总能用后来替换第一个?

1 个答案:

答案 0 :(得分:3)

f()new f几乎相同(比较thisthat)。当然,new做了很多工作准备你将要扔掉的对象。

无法盲目地将f()替换为new f if

  • 您在this(显然)
  • 中使用f
  • 您返回非对象

例如,这两个调用会产生不同的结果:

x = 5 + (function () {
    return 123;
})();

y = 5 + new function () {
    return 123;
};

在其他情况下,如果您不介意浪费资源和验证员对您大喊大叫,new没问题。