Javascript 调用一个返回新函数的函数是否与正常调用不同?

Javascript 调用一个返回新函数的函数是否与正常调用不同?,javascript,Javascript,假设我有一个javascript函数 function A(){ return function(){ console.log('something'); return new B(); } } 正在使用newa()调用此函数任何不同于A()?由于该函数有一个显式的返回,并且没有使用此,因此当您在不使用“new”的情况下调用函数时,使用或不使用新建运行该函数的结果没有差别,您怀疑“this”指向的是什么?它将是“窗口”。更新速度比用“新建”调用新

假设我有一个javascript函数

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

正在使用
newa()调用此函数任何不同于
A()

由于该函数有一个显式的
返回
,并且没有使用
,因此当您在不使用“new”的情况下调用函数时,使用或不使用
新建

运行该函数的结果没有差别,您怀疑“this”指向的是什么?它将是“窗口”。更新速度比用“新建”调用新创建的新对象时要慢。其他人已经给出了结果的答案(使用
new
是否等同于不使用它?),但让我解释一下为什么以下两个结果是等效的:

var no_new = A();
var with_new = new A();
ECMAScript的相关部分是(我将省略并简化一些信息,并调整该部分的内容以适应此答案)。这是执行
newa()
时发生的情况:

  • 将创建一个新对象
  • 检查功能
    A
    原型
  • 如果
    A
    的原型是一个对象,则新创建的对象的
    prototype
    将设置为
    A
    的原型
  • 否则,新创建对象的
    原型
    将设置为
    对象
    的默认原型
  • 调用函数
    A()
    ,并检查结果。
  • 如果结果是对象,则结果将是
    new
    的返回值
  • 否则,新创建的对象将是
    new
    的返回值
  • 在您的情况下,执行将采用路径3.1,即
    new
    操作符将返回对内部匿名函数的引用,与不使用
    new
    的函数调用相同

    因此,变量
    no_new
    with_new
    都将引用以下形式的函数:

    function () {
        console.log('something');
        return new B();
    }
    
    (请注意,
    no_new
    with_new
    是等效的,但并不相同。它们指的是同一个对象:)

    函数A(){
    返回函数(){
    console.log('something');
    返回新的B();
    }
    }
    函数B(){
    }
    var no_new=A();
    var与_new=新A();
    警报(无新消息);
    警报(带有新的);
    var是相同的=(无新==有新);
    
    警惕(它们是否相同)相关-重复?同意-结果没有差异。但是,有人会认为,使用
    newa()
    实际上会创建一个新对象,当从函数返回其他内容时,该对象随后会被垃圾收集,因此
    newa()
    的性能可能会更差。A确认
    newa()
    的速度慢10%-80%,具体取决于浏览器。“因为该函数有一个显式的
    返回
    ,并且没有使用
    ”。你能告诉我们你所说的“那个函数”是什么意思吗?(
    A()
    还是匿名函数?)。此外,我认为无论使用
    this
    ,结果都是等效的(请参阅我的答案以了解解释,如果我遗漏了什么,请让我知道)。实际上函数A中没有“this”,很抱歉,我也忘了在我的帖子中添加它,但是我想使用new的原因是嵌套函数调用另一个函数的new,我发现如果函数在那里放置new,那么函数返回一个对象会更容易理解