箭头函数调用call方法传参为何仍返回window全局上下文
问题原因说明
这个现象是箭头函数的内置特性决定的,不属于执行异常:
- 箭头函数不存在独立的
this绑定,它内部的this直接继承函数定义位置外层作用域的this值,且继承后永久固定,无法被修改。 - 我们常用的
call、apply、bind方法只能修改普通函数运行时的this指向,传入箭头函数时,指定的this绑定参数会被直接忽略。 - 你提供的代码里箭头函数定义在全局作用域下,全局作用域默认的this就是
window对象,所以哪怕用call传入空对象,最终返回的还是全局的window。
你可以用普通函数做对照验证,普通函数下call的绑定逻辑是符合预期的:
// 普通函数版本 const f = function() { return this }; console.log(f.call({})); // 输出 {},符合预期
如果箭头函数定义在非全局作用域下,也会遵循同样的继承逻辑,不受call影响:
const testObj = { createArrow: function() { // 箭头函数定义时,外层this就是createArrow运行时的this,也就是testObj return () => this; } } const f = testObj.createArrow(); console.log(f.call({})); // 输出 testObj,而非传入的空对象
内容的提问来源于stack exchange,提问作者user15883430
相关产品推荐
相关产品推荐

