新闻中心
JS中call, apply, bind的区别与使用场景_j*ascript核心
call和apply立即执行函数并改变this指向,区别在于参数传递方式;bind返回绑定this的新函数,不立即执行。

在J*aScript中,call、apply 和 bind 都是用来改变函数执行时的上下文,也就是 this 的指向。它们都属于函数的方法,定义在 Function.prototype 上,但使用方式和场景有所不同。
1. call:立即调用函数并指定 this 和参数
call 方法会立即执行函数,并将第一个参数作为函数体内 this 的值,后续参数依次传给函数。
语法:func.call(thisArg, arg1, arg2, ...)
适用场景:
- 借用其他对象的方法
- 函数式编程中快速改变上下文并执行
示例:
立即学习“J*a免费学习笔记(深入)”;
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello', '!');
// 输出:Hello, Alice!
2. apply:立即调用函数,参数以数组形式传入
apply 和 call 的作用完全一样,区别只在于传参方式:apply 接收一个参数数组。
语法:func.apply(thisArg, [argsArray])
适用场景:
- 参数数量不确定或已存在于数组中
- 求一组数的最大值、最小值(如 Math.max.apply(null, arr))
示例:
立即学习“J*a免费学习笔记(深入)”;
const numbers = [5, 6, 2, 8]; const max = Math.max.apply(null, numbers); console.log(max); // 8
注意:ES6 中可以用扩展运算符替代 apply:
风车Ai翻译
跨境电商必备AI翻译工具
407
查看详情
Math.max(...numbers);
3. bind:返回新函数,不立即执行
bind 不会立即调用函数,而是返回一个新函数,这个新函数的 this 被永久绑定到指定对象,后续可传参调用。
语法:func.bind(thisArg, arg1, arg2, ...)
适用场景:
- 事件处理中保持 this 指向原对象
- 函数柯里化(预设部分参数)
- setTimeout 或回调函数中维持上下文
示例:
立即学习“J*a免费学习笔记(深入)”;
function introduce() {
console.log(`I am ${this.name}, ${this.age} years old.`);
}
const user = { name: 'Bob', age: 25 };
const boundIntro = introduce.bind(user);
setTimeout(boundIntro, 1000);
// 一秒后输出:I am Bob, 25 years old.
核心区别总结
调用时机:
- call / apply:立即执行
- bind:返回绑定后的新函数,需手动调用
参数传递:
- call:逐个传参
- apply:传数组
- bind:支持预设参数(柯里化)
this 绑定:
- call / apply:临时改变一次 this
- bind:永久绑定 this,无法
再被修改
基本上就这些。掌握这三个方法的关键是理解“何时执行”和“如何传参”。在实际开发中,bind 常用于保持上下文,call/apply 更适合一次性借用方法或处理数组参数。
以上就是JS中call, apply, bind的区别与使用场景_j*ascript核心的详细内容,更多请关注其它相关文章!
# 如何实现
# SEO工作室沙发拍照
# 九龙镇网站推广优化
# 农机推广技师招聘网站
# 行家号与seo
# 南通建设网站
# seo初级工程师推广
# 洛阳亚马逊网站建设开发
# 重庆微信推广招聘网站
# 唐山网站建设策划书范文
# seo baijiahao
# 有何区别
# 能做什么
# 都是
# javascript
# 多线程
# 自定义
# 运算符
# 学习笔记
# 回调
# 绑定
# 区别
# 回调函数
# app
# js
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
J*aScript对象创建方式_J*aScript设计模式应用
12306怎么选座位选到安静区_12306选座安静区域选择策略
c++ 获取系统当前时间 c++时间戳获取方法
葱吃多了会怎样 葱吃多了会伤胃吗
Fabric模组开发:自定义物品与物品组的现代管理方法
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
利用Bokeh CustomJS动态控制DataTable列可见性
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
晋江读书网页版在线登录 晋江读书电脑版官网
海棠账号登录入口_登录海棠账户同步阅读记录
c++中为什么推荐使用using替代typedef_c++现代化类型别名
Lar*el Excel导入时生成自定义递增ID的策略与实践
铃兰之剑为这和平的世界希里技能组及加点推荐
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
Android Studio计算器C键功能异常排查与修复教程
c++如何使用Meson构建系统_c++比CMake更快的构建工具
如何更改在 Excel 中打开超链接时的默认浏览器
Python多线程中正确使用sigwait处理SIGALRM信号
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
PHP中高效并行检查多链接状态的教程
抖音从哪里进入网页版_抖音官方入口链接
C++如何生成随机数_C++ random库使用方法与范围设置
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
苹果手机如何防止被恶意App追踪
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程


2025-11-16
浏览次数:次
返回列表
再被修改