显式绑定指用call或apply直接指定函数执行时this指向的对象,call逐个传参、apply传参数数组,二者均立即执行函数。

显式绑定就是用 call 或 apply 直接指定函数执行时 this 指向哪个对象,这是最直接、最可控的 this 绑定方式。
call 的用法:逐个传参
call 的第一个参数是 this 要绑定的对象,后面跟的是函数实际需要的参数,**一个一个列出来**。
- 语法:
func.call(绑定对象, 参数1, 参数2, ...) - 适合参数数量固定、明确的场景
- 如果第一个参数为
null或undefined,非严格模式下this指向全局对象(如浏览器中是window),严格模式下就真的是null/undefined
例如:
const obj = { name: 'Alice' };function greet(age, city) {
console.log(`I'm ${this.name}, ${age} years old, from ${city}.`);
}
greet.call(obj, 25, 'Beijing'); // I'm Alice, 25 years old, from Beijing.
apply 的用法:传入参数数组
apply 的第一个参数同样是 this 绑定对象,但第二个参数必须是一个**数组(或类数组对象)**,用于批量传入函数所需的全部参数。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 语法:
func.apply(绑定对象, [参数1, 参数2, ...]) - 适合参数动态生成、数量不固定的情况,比如要借用
Math.max找数组最大值 - 第二个参数可以是空数组
[],表示无额外参数
例如:
const numbers = [3, 7, 1, 9];const max = Math.max.apply(null, numbers); // 9
// 等价于 Math.max(3, 7, 1, 9)
call 和 apply 的核心区别只在参数传递形式
两者对 this 的绑定效果完全一致,区别仅在于后续参数怎么传:
-
call:参数散开写,清晰直观 -
apply:参数打包进数组,更灵活 - 现代 JS 中,可以用展开运算符
...让call模拟apply的能力,比如func.call(obj, ...args)
注意:call/apply 会立即执行函数
它们不是“设置好以后等调用”,而是**绑定完 this 后立刻运行函数**。如果只想绑定 this 而不执行,要用 bind(返回新函数)。
-
func.call(obj, 1, 2)→ 执行并返回结果 -
func.bind(obj, 1, 2)→ 返回一个this已绑定、参数已预设的新函数,需手动调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










