一、柯里化:把接收多個引數的函式變換成接收乙個單一引數的函式(單一引數為多個引數中的第乙個)
函式柯里化思想:乙個js預處理的思想,降低通用性,提高適用性。
特點:引數復用
需要輸入多個引數,最終只需輸入乙個,其餘通過arguments來獲取
提前返回
避免重複去判斷某一條件是否符合,不符合則return 不再繼續執行下面的操作
延遲執行
避免重複的去執行程式,等真正需要結果的時候再執行
function fn()
這裡的this是window,要改變this指向,用bind
function bind(callback,context)
}
核心原理:利用函式執行可以形成乙個不銷毀的私有作用域,把預先處理的內容都存在這個不銷毀的作用域裡面,並且返回乙個小函式,以後要執行的就是這個小函式。
fn.bind(obj,100,200)
思考:如何給bind傳值
具體引數不知道,不能定死資料的個數,使用argments
var outerarg=array.prototype.slice.call(arguments,2);
//利用array的slice方法取到外部傳入引數的第二個及以後多個引數
callback.call(context,outerarg)
二、引數復用
var currying=function(fn)
console.log(arguments)
console.log(args)
return cb
}}function add(a,b,c)
var s=currying(add);
s(1)(2)(3)();
執行結果為:
如果使用args.push(.slice.call(arguments))
對比可以知道args是乙個類陣列物件,使用args.push 每次壓入乙個arguments。並不會對傳入的一系列數字行拆分使用。
而用array.push(),則把每次傳入的數存在陣列裡面。
.slice.call(arguments)這是乙個陣列,裡面只有乙個引數,本例來說是[1],[2],[3]
三、提前返回
var addevent = function(), (capture));
};} else if (window.attachevent) );
};}};
var elbind=addevent();
var span=document.getelementbyid("s");
var div=document.getelementbyid("d");
elbind(span, 'click', function () , false)
elbind(div, 'click', function () , false)
如上面**對於監聽事件的判斷則只會走一次,如果是傳統函式則會多次執行。則真是提前返回的好處。
總結:經測試,上述**var elbind=addevent();就會先判斷一次瀏覽器的環境,然後返回乙個小函式。
之後elbind(span, 'click', function () , false)
elbind(div, 'click', function () , false)
均只執行小函式,不會再多次判斷瀏覽器環境。
四、延遲執行
舉例如下:
var curryscore=function(fn)else
}};var result=0;
var addscore=curryscore(function(){
console.log(this)
console.log(arguments);
for(var i=0;i輸出結果:
這就是第三個特點,延遲執行,再沒有輸入引數時,不計算總結果。等需要計算的時候,再計算。
1、如果使用 fn(allscore);輸出為
this也為window,但是arguments是乙個陣列了,
即[param1,param2,param3] 轉換為 param1,param2,param3
2、補充:
a) math.max 可以實現得到陣列中最大的一項
因為math.max 引數裡面不支援math.max([param1,param2]) 也就是陣列
這塊在呼叫的時候第乙個引數給了乙個null,這個是因為沒有物件去呼叫這個方法,我只需要用這個方法幫我運算,得到返回的結果就行,.所以直接傳遞了乙個null過去
b) math.min 可以實現得到陣列中最小的一項
c) array.prototype.push 可以實現兩個陣列合併
var arr1=new array("1","2","3");
var arr2=new array("4","5","6");
函式柯里化
在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。在直覺上,柯里化聲稱 如果你固定某些引數,你將得到接受餘下引數的乙個函式 柯里化實現的原理 在函式式程式語言中,將函式可以當做物件傳遞呼...
函式柯里化
curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...
函式柯里化
curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...