超简单
不使用 apply 调用函数
function callIt(fn) { let arr = []; for(let i=0;i<arguments.length;i++){ arr.push(arguments[i]); } //apply是会自动把传入的数组里的参数提取出来的 普通函数调用必须要拆开 return fn(...arr.slice(1)); //函数里调用函数,this指针指向都是一样的 指向window,没有必要使用apply }
ES6 还可以利用扩展运算符...更简单
虽然arguments它不是数组 是1个对象 但只要内部是iterable的 就可以用...拆开
function callIt(fn) { let arr = [...arguments]; //apply是会自动把传入的数组里的参数提取出来的 普通函数调用必须要拆开 return fn(...arr.slice(1)); //函数里调用函数,this指针指向都是一样的 指向window,没有必要使用apply }
连中间变量都不要了 一句代码搞定起飞
function callIt(fn) { return fn(...[...arguments].slice(1)); }