能否将回调函数与.bind()配合使用?示例结果不符求解答
当然可以把回调函数和
.bind()配合使用! 你的问题出在没有正确调用bind()返回的绑定函数——bind()本身不会执行原函数,它只是返回一个绑定了this上下文(和可选预设参数)的新函数,你需要手动调用这个新函数才能拿到计算结果。
先看你代码的修正版本,这样就能得到预期的105:
"use strict"; let testObject = { valueOne: 1, valueTwo: 2, valueThree: 3 }; function addValues(bonusParameter) { return this.valueOne + this.valueTwo + this.valueThree + bonusParameter; } // 方式1:先绑定this,调用时传入bonus参数 const boundAdd = addValues.bind(testObject); const finalAnswer = boundAdd(99); // 1+2+3+99=105 console.log(finalAnswer); // 方式2:绑定this的同时预设bonus参数,调用时无需传参 const boundAddWithBonus = addValues.bind(testObject, 99); const finalAnswer2 = boundAddWithBonus(); // 同样得到105 console.log(finalAnswer2);
你看到的6() => 99这种奇怪结果,大概率是因为你没有调用绑定后的函数,反而把它和数值做了拼接或者错误赋值。比如如果写了let finalAnswer = addValues.bind(testObject) + 99,JavaScript会把绑定函数转换成字符串(可能包含函数结构的描述),再和99拼接,就会出现类似函数字符串加数字的异常输出。
另外补充个实用场景:bind()非常适合给定时器、事件监听这类回调绑定上下文,确保回调执行时this指向你想要的对象。举个简单例子:
// 用bind给定时器回调绑定this,1秒后输出105 setTimeout(addValues.bind(testObject, 99), 1000);
这样就完美实现了回调函数和bind()的配合使用啦!
内容的提问来源于stack exchange,提问作者DR01D
相关产品推荐
相关产品推荐

