自定义bindToAnArg函数无法正常工作,求问题排查(JavaScript)
问题分析与修复
你的代码问题出在对Function.prototype.bind()的用法理解上,以及测试代码的输出环节:
1. bind方法的参数误用
bind()的第一个参数是要绑定给目标函数的this上下文,从第二个参数开始才是要预先传入目标函数的固定参数。你现在直接把arg(也就是2)传给了第一个参数,相当于把add函数里的this绑定成了2,而不是把2作为add的第一个参数num1来绑定。
2. 测试代码的输出缺失
你最后只声明了twoPlusSix但没打印它,console.log(addTwo)只会输出函数对象本身,看不到计算结果。
修复后的代码
function bindToAnArg(func, arg){ // 第一个参数传null/undefined(因为add不需要特定this),第二个参数才是要绑定的函数参数 let myFunc = func.bind(null, arg); return myFunc; } ////Test function add(num1, num2) { return num1 + num2; } const addTwo = bindToAnArg(add, 2); // 打印绑定后的函数调用结果,而不是函数本身 const twoPlusSix = addTwo(6); console.log(twoPlusSix); // 输出8
补充说明
如果你的目标是绑定任意位置的参数,而不只是第一个,那可以调整bindToAnArg的逻辑,但当前需求是绑定第一个参数的话,上面的写法就足够。另外,也可以用箭头函数来实现类似效果:
function bindToAnArg(func, arg){ return (...rest) => func(arg, ...rest); }
这种写法更直观,不需要处理this的问题,适合不需要修改this上下文的场景。
内容的提问来源于stack exchange,提问作者kisaAlisa
相关产品推荐
相关产品推荐

