Array.prototype.slice.call()
下面要接觸‘函數柯里化’這個概念,感覺跟題目不符,不會的。題目上的會在柯里化中接觸到,至於爲什麼題目不叫‘函數柯里化’,是考慮到我對這個感念都不是很熟悉。網上找了很多,發現大同小異,沒有通俗易懂了話語,我的要求就是‘小白都要能看懂纔行’。
- 概念:把接受多個參數的函數變換成接收一個單一參數的函數,並且返回接受餘下的參數且返回結果的新函數的技術(百度找的)。//相當於使用一個閉包返回一個函數,這個函數就需要你傳原參數中剩餘的參數。哎!我都繞糊塗了,那位大俠解釋解釋唄。
- 涉及的知識點:
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的方法。自己試吧!
以上只是本人暫時的理解,不足之處請指出。