调用一个函数返回一个新的函数而不仅仅是正常调用它?

时间:2014-02-24 09:34:16

标签: javascript

所以,假设我有一个javascript函数

function A(){
    return function(){
        console.log('something');
        return new B();
    }
}

使用new A();A();进行任何不同的调用吗?

3 个答案:

答案 0 :(得分:2)

由于该函数具有明确的return并且不使用this,因此使用或不使用new运行它的结果没有区别。

答案 1 :(得分:1)

当您调用没有“new”的函数时,您怀疑“this”指向的是什么?它将是“窗口”。更新比使用“new”调用它时更新新构建的新对象要慢。

答案 2 :(得分:0)

其他人已经给出了关于结果的答案(使用new等同于不使用它吗?),但让我解释为什么以下两个结果是等价的:

var no_new = A();
var with_new = new A();

ECMAScript的相关部分是section 13.2.2(我将省略并简化一些信息并调整该部分的内容以适应这个答案)。执行new A()时会发生这种情况:

  1. 创建一个新对象。
  2. 检查函数prototype的{​​{1}}:
    1. 如果A的原型是对象,则新创建的对象A将设置为prototype的原型。
    2. 如果没有,则新创建的对象A将设置为prototype的默认原型。
  3. 调用函数Object,并检查结果。
    1. 如果结果是对象,则结果将是A()的返回值。
    2. 否则新创建的对象将是new的返回值。
  4. 在你的情况下,执行将采用路径3.1,aka new运算符将返回对内部匿名函数的引用,与没有new的函数调用相同。

    因此,变量newno_new都将以下列形式引用函数:

    with_new

    (请注意,function () { console.log('something'); return new B(); } no_new相同但不相同。它们不引用同一个对象:JSFiddle

    
    
    with_new