既然手写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 了,反之亦然。

0
1
qq__aoxyAL
为什么手写call不可以使用apply呢
2022-10-05
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程