函数绑定是通过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 不执行,只返回绑定后的新函数,适合“延迟调用”或“复用绑定逻辑”。
标签: javascript java app win 区别
还木有评论哦,快来抢沙发吧~