function f(a) { return a}
f(1) // => 1
f.call(null, 1) // => 1
Function.prototype.call(f, null, 1) // => undefined
为什么最后一行返回undefined
,我以为它们是一样的。
这些将是相同的:
function f(a) { return a}
console.log(f(1)); // => 1
console.log(f.call(null, 1)); // => 1
console.log(Function.prototype.call.call(f, null, 1)); // => 1
注意额外的.call
在最后的声明中。
解释如下:
函数.原型.调用
根据spec, Function.prototype.call
返回一个抽象操作调用(func,thisArg,argList).
所以,f.call(null, 1)
将返回抽象操作呼叫(f,空,1) where f是被调用的函数,null是调用它的上下文,并且1参数是传递给f。这将为您提供所需的输出。
基于此,Function.prototype.call(f, null, 1)
将导致抽象操作调用(Function.prototype, f, null, 1) where 函数原型是被调用的函数,f是上下文,并且null and 1参数是传递给函数原型。当然,这不会按预期工作。
函数.原型.call.call
然而,Function.prototype.call.call(f, null, 1)
将返回抽象调用操作调用(Function.prototype.call,f,null,1), where 函数.原型.调用是要调用的函数,f是调用它的上下文, and null and 1作为参数传递。那么那会是什么样子呢?好吧,自从f是上下文并且call是被调用的函数(null,1),最终结果与:f.call(null, 1)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)