call方法用于显式指定函数执行时的this值并立即调用,语法为func.call(context, arg1, arg2...),第一个参数为this绑定对象,后续为依次传入的实参。

call 方法用于显式指定函数执行时的 this 值,并立即调用该函数。它接收的第一个参数是绑定给 this 的上下文对象,后续参数则是传给目标函数的实际参数。
call 的基本语法和参数结构
调用形式为:func.call(context, arg1, arg2, ...)
-
第一个参数:指定函数内部
this指向的对象(即上下文)。可以是对象、null、undefined、原始值(如字符串、数字,会被自动包装) - 其余参数:按顺序依次作为实参传入函数体,一一对应函数定义中的形参
传递上下文的常见方式
上下文参数可以是任意值,但效果取决于严格模式与非严格模式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 非严格模式下,传
null或undefined会自动替换为全局对象(浏览器中是window) - 严格模式下,
null和undefined会真实地作为this值保留 - 传入原始值(如
42、"hello")时,会被临时包装成对应包装对象(Number、String实例)
实际使用示例
假设有一个函数:
function introduce(age, city) {
console.log(`I'm ${this.name}, ${age} years old, live in ${city}.`);
}
用 call 绑定不同上下文并传参:
-
introduce.call({ name: 'Alice' }, 28, 'Beijing');→ 输出:I'm Alice, 28 years old, live in Beijing. -
introduce.call(null, 30, 'Shanghai');(非严格模式)→this指向window,若window.name存在则用它;否则可能输出I'm , 30 years old... -
introduce.call('Bob', 25, 'Guangzhou');→this是String包装对象,this.name为undefined,但this.length可用
与 apply 和 bind 的区别要点
三者都用于 this 绑定,但参数传递方式不同:
-
call:上下文 + 逗号分隔的参数列表 -
apply:上下文 + 一个数组(或类数组)作为参数集合 -
bind:返回新函数,不立即执行;上下文固定,参数可预设(柯里化)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










