国产探花免费观看_亚洲丰满少妇自慰呻吟_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一致(因為
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 易门县| 江城| 原阳县| 辽宁省| 白山市| 中江县| 东宁县| 葵青区| 凤山市| 东阳市| 平顺县| 航空| 和硕县| 博湖县| 屏南县| 永泰县| 图木舒克市| 汉中市| 阆中市| 连城县| 衡南县| 阿图什市| 霍邱县| 南岸区| 昌图县| 化州市| 巴南区| 鹤壁市| 合江县| 伊通| 黄石市| 龙南县| 镇原县| 泰和县| 黔南| 富宁县| 兰溪市| 六安市| 济南市| 松原市| 改则县|