H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【Web前端问题】关于call的一个疑问

function f1() {    
console.log(this);    
console.log(1);
}
function f2() {    
console.log(this);    
console.log(2)
}
f1.call.call(f2);  //Window,2

输出的结果看不懂求大神帮忙

回答:

首先,call 是一个内部定义的 Function 对象,f1.callf2.call 都是一样的,是 Function.prototype.call,这个很容易证明,只需要试验一下代码就行

f1.call === f2.call
f1.call === Function.prototype.call
// 上面两句都返回 true

然后呢 f1.call 也是一个 Function 对象,所以 f1.callf1.call.call 应该也是同一个东东,试验下

f1.call.call === f1.call
// 结果是 true

f1.call.call(f2) 是把 f2 作为 this 对象调用了 Function.prototype.call,也就相当于是调用了 f2.call()

call 的第 1 个参数是 nullundefined 的时候 this 被设置为 global 对象,在浏览器里就是 window

这个参考 ECMAScript Language Specification (ECMA-262) 的第 13.4.3 的第 2 条

所以最后结果就是你看到的那样了。

本文地址:H5W3 » 【Web前端问题】关于call的一个疑问

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址