新闻中心

JS中call, apply, bind的区别与使用场景_j*ascript核心

2025-11-16
浏览次数:
返回列表
call和apply立即执行函数并改变this指向,区别在于参数传递方式;bind返回绑定this的新函数,不立即执行。

js中call, apply, bind的区别与使用场景_javascript核心

在J*aScript中,callapplybind 都是用来改变函数执行时的上下文,也就是 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翻译

跨境电商必备AI翻译工具

风车Ai翻译 407 查看详情 风车Ai翻译
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浏览器启动后显示白屏的解决教程 

搜索