函数绑定是通过bind方法将函数的this永久固定为指定对象并预设部分参数,返回新函数而不立即执行;常用于事件回调、定时器及参数预填充,与call/apply的立即执行不同,且不支持箭头函数。

函数绑定指的是让一个函数的 this 指向固定为某个对象,不管它后续怎么被调用。JavaScript 中的 bind 方法就是专门干这事的:它不执行函数,而是返回一个新函数,这个新函数调用时 this 永远绑定你指定的对象。
bind 的基本用法
语法很简单:fn.bind(thisArg, arg1, arg2, ...)。第一个参数是将来调用时的 this 值,后面的参数是预先“填好”的实参(也叫预设参数或柯里化)。
thisArg 可以是任意值,比如对象、null、undefined,甚至原始值(但会被包装成对应对象) 如果原函数有多个参数,bind 后再调用时传的参数会追加在预设参数之后 bind 返回的函数不能再次用 bind 改变 this(已被锁定),也不能用 call/apply 覆盖
常见使用场景
最典型的是事件回调和定时器中避免 this 丢失:
给 DOM 元素绑定事件时,方法里的 this 默认不是类实例,用 bind(this) 就能保持指向 setTimeout(obj.method, 100) 会导致 method 内部 this 变成 window 或 undefined,改写成 setTimeout(obj.method.bind(obj), 100) 就行 做参数预填充,比如 const add5 = add.bind(null, 5),之后调用 add5(3) 相当于 add(5, 3)
bind 和 call/apply 的区别
call 和 apply 是立即执行函数,并临时指定 this;bind 不执行,只返回绑定后的新函数,适合“延迟调用”或“复用绑定逻辑”。
立即学习“Java免费学习笔记(深入)”;
func.call(obj, a, b) → 立即运行,this 是 obj func.apply(obj, [a, b]) → 立即运行,this 是 obj,参数用数组传 const bound = func.bind(obj, a) → 不运行,返回函数,之后 bound(b) 相当于 func.call(obj, a, b)
注意点和小技巧
bind 后的函数继承原函数的 length(形参个数),但只算未被预设的参数个数;另外,箭头函数没有自己的 this,所以对它调用 bind 是无效的。
多次 bind 不会叠加效果,只有第一次生效(后续 bind 被忽略) 想让绑定函数也能被 new 调用(构造函数模式),bind 返回的函数支持 new —— 此时 this 会指向新实例,而不是 bind 时传入的对象 现代写法中常用箭头函数或 class 字段箭头函数替代 bind,减少手动绑定,比如 handleClick = () => { ... }
基本上就这些。bind 不复杂但容易忽略细节,关键是理解它“返回新函数 + 固定 this + 预设参数”三位一体的作用。
以上就是什么是函数绑定_javascript中bind方法如何使用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544367.html
微信扫一扫
支付宝扫一扫