apply方法的核心作用是让函数在指定this上下文中执行并将参数以数组或类数组形式一次性传入;语法为func.apply(thisArg, [argsArray]),要求第二参数必须是数组或类数组,且立即执行函数。

apply 方法的核心作用,就是让函数在指定的 this 上下文中执行,并且**把参数以数组(或类数组)形式一次性传入**。
基本语法和关键点
调用形式是:func.apply(thisArg, [arg1, arg2, ...])
-
thisArg:函数内部this将指向的对象;传null或undefined在非严格模式下会自动绑定到全局对象(如window),严格模式下保持为null/undefined - 第二个参数必须是数组或类数组(如
arguments、NodeList),不能是散开的参数 - 它会立即执行函数,不是返回新函数(这点和
bind不同)
常见使用场景举例
比如你想借用数组方法操作类数组:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
const arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3};
const arr = Array.prototype.slice.call(arrayLike); // 传统写法
// 等价于:
const arr2 = Array.prototype.slice.apply(arrayLike, [0]); // 第二个参数是数组 [0]
再比如动态合并数组:
const arr1 = [1, 2]; const arr2 = [3, 4, 5]; arr1.push.apply(arr1, arr2); // 相当于 arr1.push(3, 4, 5) console.log(arr1); // [1, 2, 3, 4, 5]
和 call、bind 的区别要点
-
call:参数逐个列出,func.call(thisArg, arg1, arg2) -
apply:参数必须封装成数组/类数组,func.apply(thisArg, [arg1, arg2]) -
bind:不执行,返回一个this和参数都预设好的新函数
注意 this 绑定的优先级
如果函数本身是箭头函数,apply 无法改变其 this —— 因为箭头函数的 this 是词法绑定、不可修改的。只有普通函数才受 apply 影响。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










