既然手写bind为什么要在bind的代码里面调用call和apply呢??
来源:6-5 作用域相关的面试题 - part1

JhinKoo
2021-12-11
感觉如果直接在bind里面就写call和apply,感觉考察重心偏离了,我个人重新写了一个,希望老师看一下。
Function.prototype.myBind = function(target){
var that = this;
var args = []
for(let i = 0 ; i < arguments.length ;i++){
args[i] = arguments[i];
}
args.length = arguments.length;
return function(){
target.fn = that;
let myArgs = [];
for(let i = 1; i < args.length ;i++){
myArgs.push("args["+i+"]");
}
eval("target.fn("+args.toString()+")");
delete target.fn;
}
}
写回答
1回答
-
双越
2021-12-11
这样也可以。不过,eval 并不推荐使用(严格模式下,eval 的作用域会不一样)。
说些 bind 是可以使用 call 和 apply 的。但手写 call 就不能使用 apply 了,反之亦然。
012022-10-05
相似问题