关于apply的应用

从一道js编程题开始:

实现函数 callIt,调用之后满足如下条件

1、返回的结果为调用 fn 之后的结果

2、fn 的调用参数为 callIt 的第一个参数之后的全部参数

正确实现:

function callIt(fn) {

//获取除了fn以外的所有参数

 var newArr = Array.prototype.slice.call(arguments,1);

//执行fn并将newArr这个数组里面的数据作为参数传给fn

    return fn.apply(this,newArr);

}

我的疑问实现:

function callIt(fn) {

    var newArr = Array.prototype.slice.call(arguments,1);

//如果这样实现的话,newArr会直接以数组的形式传入,而不是分成一个一个的参数

    return fn(newArr);

}

测试:

function callIt(fn) {

    var newArr = Array.prototype.slice.call(arguments,1);

    return fn(newArr);

}

function test(n,m){

console.log(n+m);

}

callIt(test,1,2);

输出: 1,2undefined

//这里传入test的n是数组,m是undefined

---------------------------------------------------------------------------------------------------------------------

function callIt(fn) {

    var newArr = Array.prototype.slice.call(arguments,1);

    return fn.apply(this,newArr);

}

function test(n,m){

console.log(n+m);

}

callIt(test,1,2);

输出:3 

总结:

1、Array.prototype.slice.call(arguments,1);让类数组可以调用数组的slice方法。获取arguments从1开始的参数。

2、fn.apply(this,newArr);这里使用apply主要是为了将装有参数的数组里的参数参入fn中。

你可能感兴趣的:(关于apply的应用)