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