call方法能立即执行函数并指定this值,语法为func.call(thisArg, arg1, arg2...),第一个参数决定this指向,后续参数依次传入;null/undefined在非严格模式下指向全局对象,严格模式下保持原值;原始值被自动包装;与apply(参数为数组)、bind(返回预绑定函数)不同;不影响箭头函数的this。

call 方法能立即执行函数,并把指定对象设为该函数运行时的 this 值。
call 的基本用法
语法是:func.call(thisArg, arg1, arg2, ...)。第一个参数决定函数体内 this 指向谁,后面的参数依次传给函数。
- 如果
thisArg是对象(比如{name: 'Alice'}),函数内 this 就指向它 - 如果传
null或undefined,非严格模式下 this 指向全局对象(浏览器中是window),严格模式下就是null或undefined - 传原始值(如字符串、数字)会被自动包装成对应包装对象
实际例子看 this 变化
假设有个函数:
function greet() { console.log('Hello, ' + this.name); }直接调用 greet(),this 是全局对象,输出可能是 Hello, undefined(因为全局没有 name)。
用 call 改变 this:
const person = { name: 'Bob' };<br>greet.call(person); // 输出:Hello, Bob这里 person 成了 this,所以能正确读取 name。
和 apply、bind 的区别
三者都用于显式绑定 this,但行为不同:
-
call立即执行,参数逐个列出 -
apply也立即执行,但第二个参数是数组或类数组 -
bind不执行,返回一个新函数,this 和部分参数被预先绑定
注意点
call 只影响当次调用,不会修改原函数;箭头函数没有自己的 this,call 对它无效(它继承外层作用域的 this)。











