国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript偏函數與柯里化實例詳解

2024-05-06 15:41:20
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript偏函數與柯里化。分享給大家供大家參考,具體如下:

到目前為止我們僅討論綁定this,現在讓我們更深入學習。
我們不僅能綁定this,也可以是參數,這較少使用,但有時很方便。

bind完整的語法為:

let bound = func.bind(context, arg1, arg2, ...);

可以綁定上下文this和函數的初始參數。舉例,我們有個乘法函數mul(a,b):

function mul(a, b) { return a * b;}

我們可以在該函數的基礎上使用綁定創建一個double函數:

let double = mul.bind(null, 2);alert( double(3) ); // = mul(2, 3) = 6alert( double(4) ); // = mul(2, 4) = 8alert( double(5) ); // = mul(2, 5) = 10

調用mul.bind(null, 2)創建新函數double,傳遞調用mul函數,固定第一個參數上下文為null,第二個參數為2,多個參數傳遞也是如此。

這稱為偏函數應用——我們創造一個新函數,讓現有的一些參數值固定。

注意,這里確實不用this,但bind需要,所以必須使用null。

在下面代碼中函數triple實現乘以3的功能:

let triple = mul.bind(null, 3);alert( triple(3) ); // = mul(3, 3) = 9alert( triple(4) ); // = mul(3, 4) = 12alert( triple(5) ); // = mul(3, 5) = 15

為什么我們通常使用偏函數?

這里我們偏函數的好處是:通過創建一個名稱易懂的獨立函數(double,triple),調用是無需每次傳入第一個參數,因為第一個參數通過bind提供了固定值。

另一種使用偏函數情況是,當我們有一個很通用的函數,為了方便提供一個較常用的變體。

舉例,我們有一個函數send(from, to, text),那么使用偏函數可以創建一個從當前用戶發送的變體:sendTo(to, text)

使用沒有上下文的偏函數

如果想固定一些參數,但不綁定this呢?

內置的bind不允許這樣,我們不能忽略上下文并跳轉到參數。幸運的是,可以僅綁定參數partial函數容易實現。

如下:

function partial(func, ...argsBound) { return function(...args) { // (*)  return func.call(this, ...argsBound, ...args); }}// Usage:let user = { firstName: "John", say(time, phrase) {  alert(`[${time}] ${this.firstName}: ${phrase}!`); }};// add a partial method that says something now by fixing the first argumentuser.sayNow = partial(user.say, new Date().getHours() + ':' + new Date().getMinutes());user.sayNow("Hello");// Something like:// [10:00] Hello, John!

調用partial(func[, arg1, arg2...])函數的結果為調用func的包裝器(*號行):

this一致(因為
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 双柏县| 奉新县| 图木舒克市| 朔州市| 东阳市| 开平市| 融水| 保定市| 城步| 江孜县| 凤阳县| 宜兰市| 梧州市| 巫山县| 五莲县| 黎平县| 神木县| 山阴县| 安宁市| 大兴区| 腾冲县| 泸水县| 永顺县| 盐城市| 天峻县| 罗山县| 奉新县| 仁布县| 长白| 怀柔区| 托克托县| 宜城市| 松桃| 通道| 哈巴河县| 和龙市| 浦江县| 资中县| 夏津县| 丽江市| 昂仁县|