call apply bind的区别和用法是什么
说到JavaScript里经常绕不过去的三大法宝——call、apply和bind,你知道它们到底有啥区别吗?别急,我来给你简单说说:
-
call:这是用来改变函数里的
this的非常直接的办法。你调用fun.call(thisArg, arg1, arg2, ...)时,会马上执行这个函数,this就被指定成你传进去的thisArg,参数直接写出来,按顺序传。 -
apply:和call很像,差别就在于参数传递方式。它是
fun.apply(thisArg, [argsArray]),也就是说参数得传数组。这在你一堆参数放数组里很方便的时候特别有用,调用后函数同样立刻执行。 -
bind:超级cool的一个,别看它名字跟call、apply差不多,它不会立刻执行函数!它
fun.bind(thisArg, args...)会返回一个新函数,这个新函数的this固定成我们传给它的thisArg,后续调用时还能接着传参,特别灵活。
简而言之,call和apply就是来“马上调用”,bind是帮你“先绑定,后调用”,这几个方法都是用来调整函数执行时的上下文环境,也就是this。

bind函数的用法和参数是什么 怎么手动实现bind函数
你平时可能最迷bind,因为它挺神奇,能返回一个新的函数,里面this永远是你绑定好的那个东西。简单说说它的用法和参数吧:
-
第一个参数是你想要绑定的
this,也就是说你希望函数执行时this指向哪里。这个实实在在是bind的核心。 -
之后的参数是你提前想写好的函数参数,这些参数会被存在新函数里,当你后面调用新函数时,再传的参数会被拼接在后面。
-
用
bind得注意它不会立即执行原函数,它只是给你弄个新壳子,里面“锁”住this,让你后续任意时候调用都能用。
至于如何手动实现一个bind?嘿,咱们来个简单示范:
function myBind(fn, context, ...args) {
return function(...newArgs) {
return fn.apply(context, args.concat(newArgs));
}
}
这代码干了啥?就是返回了个新函数,这函数执行时会用apply以我们指定的context调用原始函数,参数是之前定的加上新传入的。这样一来,this绑好啦,参数随你坑!
另外,咱们说说bind在网络编程里也有另外的意思,比如C语言里的bind函数,专门用来绑定套接字和网络地址啥的。这两个用法大不同哈,千万别搞混了!

相关问题解答
- call和apply有什么区别吗?
哎呀,这俩其实挺像的,最大的区别是参数怎么传。call得一个个写参数,比如func.call(thisArg, 1, 2, 3),而apply喜欢数组,写成func.apply(thisArg, [1,2,3]),特别适合你参数已经在数组里的时候用。用法上差不多,就是参数不一样的样子。
- bind返回的新函数什么时候执行?
这个嘛,bind不会帮你执行函数,哎,就是给你返回一个“包装”好的函数,等你啥时候需要调用,就自己去调用它。再说一句,用它很灵活喔,比如用在事件绑定、回调这种地方,都能帮你锁住this,超实用。
- 为什么call和apply会马上执行函数?
因为它们的设计就是让函数“立刻”用新的this跑起来,没得拖拉。你想想,fun.call(thisArg) 等于“打电话”让函数立刻动,立即执行,结果马上呈现。bind不一样,它是在给你打包一个待机状态,等着你随时执行。
- bind是不是永远绑定
this?
没错!bind是特别稳定的“锁定者”,新函数里的this永远不会变,这对保证代码里this行为一致特别重要。想想事件处理器里乱用this,简直疼,bind一搞,立马稳了。可是要注意,不能再用call/apply去改变它,因为它被锁死啦。
本文来自作者[吕圣霖]投稿,不代表龙云科技立场,如若转载,请注明出处:https://www.beyac020.com/zzzl/202512-fWurOH4P1Pg.html
评论列表(3条)
我是龙云科技的签约作者“吕圣霖”
本文概览:call apply bind的区别和用法是什么 说到JavaScript里经常绕不过去的三大法宝——call、apply和bind,你知道它们到底有啥区别吗?别急,我来给你简...
文章不错《call apply bind的区别和用法 bind函数的用法和参数》内容很有帮助