Array.prototype.slice.call()

Array.prototype.slice.call()

下面要接觸‘函數柯里化’這個概念,感覺跟題目不符,不會的。題目上的會在柯里化中接觸到,至於爲什麼題目不叫‘函數柯里化’,是考慮到我對這個感念都不是很熟悉。網上找了很多,發現大同小異,沒有通俗易懂了話語,我的要求就是‘小白都要能看懂纔行’。


  1. 概念:把接受多個參數的函數變換成接收一個單一參數的函數,並且返回接受餘下的參數且返回結果的新函數的技術(百度找的)。//相當於使用一個閉包返回一個函數,這個函數就需要你傳原參數中剩餘的參數。哎!我都繞糊塗了,那位大俠解釋解釋唄。
  2. 涉及的知識點:
    1.閉包、slice(),call()~~~~
    Eaxmple:
function curry(fn){
        var args = Array.prototype.slice.call(arguments,1);
 /**爲什麼要用Array.prototype.slice?**/
 //是因爲我們傳的參數不是數組,所有隻有用數組原型中的方法
 //Array.prototype.slice = function(arg,arg1,……){}
 //~~.call用call是把arguments綁定在slice這個方法上,(不知道這樣說對不對?)
 //Array.prototype.slice.call(obj,start,end)--start:方法中slice截取的開始位置,end終止位置;      
        return function(){
            var innerArgs = Array.prototype.slice.call(arguments);

            var finalArgs = args.concat(innerArgs);

            return fn.apply(null, finalArgs);
            //null是沒有指定環境;
        };
    }
    function add(num1, num2){
        return num1 + num2;
    }
    var curriedAdd = curry(add, 5);
    alert(curriedAdd(3));

代碼的其餘部分我就不解釋了,應該很好看懂,至於怎麼深入瞭解大家可以去試試,數組的prototype的方法,字符串的prototype的方法。自己試吧!
以上只是本人暫時的理解,不足之處請指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章