call、apply、bind 的区别?

js的apply,call,bind区别 call()数组和参数列表在JavaScript中是两个不同的概念,但它们可以相互转换和使用。下面我会解释它们的区别,并给出相应的例子。 阅读详情

说到call、apply、bind,其最主要的作用,是改变 this 的指向!!!

1.call、apply、bind 的简单使用

这三者都是函数的一个方法,那么使用的方式就出来了 .call() 、 .apply() 、.bind()
示例:

//  定一个普通函数
function func() {
	console.log(this)
}

// 正常调用函数
func(); // window

// 使用call调用函数
func.call(); //  window

// 使用apply调用函数
func.apply(); // window

// 使用bind调用
let reason = func.bind() // 不会执行函数,但是会返回一个函数
reason(); // window

总结1:

call、apply 会直接调用函数,bind不会直接调用但会返回一个函数

2.call、apply、bind 来改变this指向

        var name = '丽丽'
        function func() {
            console.log(this, this.name)
        }
        let person = {
            name: '大丽'
        }

        // 正常调用
        func(); // window, 丽丽

        // 改变this指向
        func.call(person); // person, 大丽
        func.apply(person);// person, 大丽

        let reason = func.bind(person);
        reason()// person, 大丽

总结2:

call、apply、bind 都可以改变this的指向,如果不传,则默认为全局对象 window

3.call、apply、bind 传参

        let animal = {
            name: '安安',
            sayName: function (p1, p2, p3) {
                console.log(`我叫${this.name},我的主人叫${p1},她有时${p2},有时${p3}`)
            }
        }
        let cat = {
            name: '依安'
        }

        // 正常调用
        animal.sayName('丽丽', '暴躁', '温柔'); // 我叫安安,我的主人叫丽丽,她有时暴躁,有时温柔
        // 改变this指向,并传参
        animal.sayName.call(cat, '丽丽', '暴躁', '温柔'); // 我叫依安,我的主人叫丽丽,她有时暴躁,有时温柔
        animal.sayName.apply(cat, ['丽丽', '暴躁', '温柔']);// 我叫依安,我的主人叫丽丽,她有时暴躁,有时温柔

        let reason = animal.sayName.bind(cat, '丽丽', '暴躁', '温柔');
        reason()// 我叫依安,我的主人叫丽丽,她有时暴躁,有时温柔

总结3:

call、bind可接受N多个参数

  • 第一个参数为this指向的对象
  • 自第二个参数起,均为映射函数的参数

apply只能接受两个参数

  • 第一个参数为this指向的对象
  • 第二个参数为一个数组,数组的元素均为映射函数的参数
STM32F103C8T6驱动DHT11温湿度传感器程序 本程序基于 STM32F103C8T6 微控制器,通过 GPIO 模拟单总线通信时序实现对 DHT11 温湿度传感器的数据采集,主机采用拉低数据线的方式触发传感器启动,并通过检测高电平持续时间区分逻辑“0”和“1”,依次读取湿度和温度的整数数据及校验位,经过校验后将有效结果存入缓存数组,实现对环境温湿度的周期性测量与处理。 阅读详情

相关推荐

用AI助手Cursor轻松自动生成流程图

通过 Cursor + Mermaid,我们可以快速、准确地自动生成流程图,上面演示的例子部分流程图可能比较丑,我们可以通过流程图软件导入Mermaid代码,然后手动进行微调就可以了,如果你对美观要求不是特别多,可以直接用,这将极大地提升代码可视化和架构设计的效率。

呱牛 Just do IT 1936

call()与apply()的区别与作用

1、概念 call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。 2、作用: call()方法和apply()方法的作用相同:改变this指向。 3、他们的区别在于接收参数的方式不同: call():第

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 2538

避坑指南:RK3568双网口RMII模式DTS配置常见错误与调试技巧

本文详细解析了RK3568双网口RMII模式DTS配置中的常见错误与调试技巧,涵盖时钟配置、PHY识别、复位时序等关键问题。通过实战案例和系统化调试方法,帮助开发者快速解决百兆以太网连接不稳定、PHY识别失败等典型问题,提升开发效率。

weixin_42549037的博客 343

bind、call、apply 区别

一、bind、call、apply的作用 关于call、apply、bind函数,它们主要用来改变this指向的,在很多框架中常有用到,而且也是面试官喜欢问到的问题:多数会问道三者的区别, 以及手动实现它们。 call的用法 fn.call(thisArg, arg1, arg2, arg3, ...) 调用fn.call时会将fn中的this指向修改为传入的第一个参数thisArg;将后面的参数传入给fn,并立即执行函数fn。 let obj = { name: "xiaoming",

weixin_40856652的博客 2万+

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 314

Xcelium XRUN实用指南:从入门到高效仿真

本文是Xcelium XRUN仿真工具的实用指南,从基础入门到高效应用全面解析。XRUN作为Cadence Xcelium的统一命令行入口,能自动化编译、精细和仿真流程,大幅提升数字芯片与FPGA验证效率。文章详细介绍了最简命令、波形调试、增量编译、多核并行仿真等核心功能,并提供了管理复杂项目、性能调优与深度调试的进阶技巧,帮助工程师快速上手并精通这一高效仿真工具。

weixin_29238147的博客 737

call、bind、apply的区别

apply call bind

yujiabao702的博客 855

Android 13 Hotseat定制化修改——001 hotseat布局方向

一.背景由于需求是需要自定义修改Hotseat,所以此篇文章是记录如何自定义修改hotseat的,应该可以覆盖大部分场景,修改点有修改hotseat布局方向,hotseat图标数量,hotseat图标大小,hotseat布局位置,hotseat图标禁止形成文件夹,hotseat图标禁止移动到Launcher...

Java_fenxiang的博客 1101

call、bind、apply三者的区别

当一个函数作为构造器使用时(通过 new 关键字), 它的 this 值绑定到新创建的那个对象。3、如果你在声明一个变量的时候没有使用var或者let、const(es6),你就是在给全局的this添加或者改变属性值。this改变为obj了,但是绑定的时候立即执行,当触发点击事件的时候执行的是fn的返回值undefined。对于函数中的this的指向问题,有一句话很好用:运行时this永远指向最后调用它的那个对象。bind会把fn中的this预处理为obj,此时fn没有执行,当点击的时候才会把fn执行。

nanxun201314的博客 9156

图像处理 | 基于matlab的多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)算法联合的低照度图像增强(附代码)

本文介绍了一种基于多尺度Retinex(MSR)和CLAHE的低照度图像增强算法。算法首先对图像进行多尺度Retinex处理,通过不同尺度的高斯核去除光照影响;然后采用CLAHE算法进行对比度增强。Matlab实现展示了算法流程,包含灰度转换、多尺度Retinex增强和CLAHE处理。实验结果显示,该方法能有效提升低照度图像的可见性,增强细节表现。最后提出了改进建议,包括引入深度学习方法和优化参数选择。

尘世冰封的专栏 952

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1552

Call Apply Bind有什么区别

在JavaScript中,、和是Function对象上的三个方法,它们都允许开发者指定函数内部的值。然而,它们在使用方式和功能上有着细微但重要的区别。理解这些差异对于编写高效、可维护的前端代码至关重要。 方法允许调用一个函数,并且显式地指定的值,同时可以传递参数列表给该函数。与类似,也用于调用函数并指定的值,但是它接受参数数组或类数组对象作为参数传递给函数。方法不会立即执行函数,而是返回一个新的函数,这个新函数的值被永久绑定到了时传入的第一个参数上。 说明: 不同角度思考:有时候我们需要处理不定数量的参数,

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1303

FastAPI 极简教程(偏实战,一篇搞定)

本文是一篇FastAPI实战教程,通过最少的概念讲解快速掌握FastAPI的核心功能。文章首先介绍FastAPI是基于Starlette和Pydantic的高性能Python API框架,具有自动生成文档、类型驱动校验、异步支持和依赖注入等优势。教程从安装环境开始,演示了如何创建最小项目并编写第一个"Hello World"接口。接着详细讲解了路由参数处理(Path/Query/Body)、Pydantic数据模型校验、响应模型控制、状态码设置等核心功能。在高级功能方面,重点介绍了错误处

AI天才研究院 812

bind、call、apply区别

在JavaScript中,call、apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向。 call、apply、bind方法的共同点和区别:apply、call、bind三者都是用来改变函数的this对象的指向的;apply、call、bind三者第一个参数都是this要指向的对象,也就是想指定的上下文(函数的每次调用都会拥有一个特殊值——本次调用的上下文(context)——这就是this关键字的值。);apply、call、b...

qq_46131492的博客 3244

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

javascript 中 bind、call和apply的区别

本文详细讲解了javascript 中 bind call apply 的区别以及使用场景和使用方法

Sherry Tian的博客 924

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

call , apply, bind, 的区别

apply和call都是为了改变某个函数运行时的上下文而存在的 (就是为了改变函数内部this的指向); 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及其以后的参数都是数组里面的元素,就是说要全部列举出来; bind() 也是改变函数体内this的指向; bind会创建一个新函数,称为绑定函数,当调用这个函数的时候,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个及以后的参数加上绑

weixin_48895522的博客 3787

call,apply,bind的区别

一、call,apply,bind的相同点: 都是改变this指向的; 第一个参数都是this要指向的对象; 都可以利用后续参数传参; 二、call,apply,bind的区别: call和bind的参数是依次传参,一一对应的; 但apply只有两个参数,第二个参数为数组; call和apply都是对函数进行直接调用,而bind方法返回的仍是一个函数; 例如: var a ={ name:'一一', age:'22', sex:'女', ho.

why404 1万+

call、apply、bind的用法及区别

以下是对callapply和bindcall。

花姐夫JUN的博客 1012

call,apply,bind三者的区别

1、本质上的区别三者最大的区别是call和apply会改变this的指向并且立即执行函数,但是bind方法不会立即执行函数,而是会返回this改变后的函数。 let obj = { name:'张三', age:18, func:function(){ console.log(this.name + "年龄" + this.age); } }

qq_55928824的博客 5279

JS 中bind、call、apply的区别

和call/apply的功能类似,只不过bind修改this指向之后,返回的新函数不会自动执行,如果有需要,需要手动执行;而call和apply改变this之后,返回的新函数会自动执行。方法的功能:修改原函数的this指向,并执行这个新函数。call和aply的第二个(或大于2个)参数为fn传入的参数。用来修改函数的执行上下文(this)。执行时一个对象可以使用另一个对象的方法。

魏晋- 1166

call、apply和bind的区别

面试会经常被问到哦!!!!!

hmxs_hmbb的博客 1万+

手写 call apply bind及它们区别

call 是 JavaScript 函数的一个方法,用于在指定的上下文中调用函数。 它的语法是 function.call(thisArg, arg1, arg2, ...),其中 thisArg 是要将函数调用应用到的上下文,后面的参数 arg1, arg2, ... 是传递给函数的参数。 使用 call 方法可以立即调用一个函数,并且可以在调用时指定函数内部的 this 值,从而改变函数的执行上下文。

秋来九月八 544

bind、call、apply 区别?

方法中,在定时器中是作为回调函数来执行的,因此回到主栈执行时是在全局执行上下文的环境中执行的,这时候。的指向,后面传入的也是一个参数列表(但是这个参数列表可以分多次传入)。的指向,第二个参数是函数接受的参数,以数组的形式传入。指向后原函数会立即执行,且此方法只是临时改变。指向后原函数会立即执行,且此方法只是临时改变。作用是改变函数执行时的上下文,简而言之就是。bind方法和call很相似,第一参数也是。的指向,后面传入的是一个参数列表。接受两个参数,第一个参数是。方法的第一个参数也是。

piglite的专栏 718

apply 、call 以及 bind 的使用和区别

一、被apply和call调用的函数中没有传递参数 (一)不传参数 结果: (二)传递 null 结果: 总结: 1.当使用 apply和 call去调用函数并且没有传递参数时,前提这个函数中也没有传递参数,我们发现 他们的打印结果和 this 指向是相同的 都是指向window 此时相当于 f1() 调用函数 就相当于 f1.apply() 和 f1.call() 2.当传递 null 的时候,他们的指向也是相同的 都是指向 window 此时相当于 f1() 调用函数 就相当于 f1.

保持清醒 608

call、apply、bind的区别及应用

call、apply、bind作用是改变函数执行是的上下文,也就是改变函数运行时的this指向 let obj = {name:"cyy"}; function Child(name){ this.name = name; } Child.prototype = { constructor:Child, showName:function(){ console.log(this.name); } } var child = new Child("kiru

月来better 256

JS—call,apply,bind:1分钟掌握三者的区别

这里还遇到了另一个小插曲,我注册这个容器的方法是在父类中写的,我直接在父类的构造方法里面去初始化容器。我在项目启动的时候,通过容器存储我有哪些方法,说白了就是一个map,key是方法名,value是方法。H5给我方法名的时候,我通过map去获取,获取到了就说明有这个方法,没获取到就说明没有。我第一个版本这些方法全都写的静态,静态方法会有一个问题,那就是我如果启动了两个webview,只有一个对象去通信,理论上是有问题。而是,直接方法()执行的。这样,就会在执行方法的时候,this指向的不是我实际的对象。

海晨忆的博客 1184
上一篇: vue通信 EventBus事件总线还不会使用?
下一篇: 如何修改用户文档选中高亮效果?
Dark_programmer
博客等级 码龄7年 9073粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值