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

首頁(yè) > 編程 > JavaScript > 正文

淺談JS中的bind方法與函數(shù)柯里化

2019-11-20 09:16:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

綁定函數(shù)bind()最簡(jiǎn)單的用法是創(chuàng)建一個(gè)函數(shù),使這個(gè)函數(shù)不論怎么調(diào)用都有同樣的this值。不同于call和apply只是單純地設(shè)置this的值后傳參,它還會(huì)將所有傳入bind()方法中的實(shí)參(第一個(gè)參數(shù)之后的參數(shù))與this一起綁定。

關(guān)于這個(gè)特性看《JS權(quán)威指南》原文的例子:

var sum = function(x,y) { return x + y }; var succ = sum.bind(null, 1); //讓this指向null,其后的實(shí)參也會(huì)作為實(shí)參傳入被綁定的函數(shù)sumsucc(2); // => 3: 可以看到1綁定到了sum函數(shù)中的x

其次, bind()方法所返回的函數(shù)的length(形參數(shù)量)等于原函數(shù)的形參數(shù)量減去傳入bind()方法中的實(shí)參數(shù)量(第一個(gè)參數(shù)以后的所有參數(shù)),因?yàn)閭魅隻ind中的實(shí)參都會(huì)綁定到原函數(shù)的形參,舉個(gè)例子:

function func(a,b,c,d){...} //func的length為4var after = func.bind(null,1,2); //這里輸入了兩個(gè)實(shí)參(1,2)綁定到了func函數(shù)的a,bconsole.log(after.length); //after的length為2

第三,當(dāng)bind()所返回的函數(shù)用作構(gòu)造函數(shù)的時(shí)候, 傳入bind()的this將被忽略,實(shí)參會(huì)全部傳入原函數(shù),這樣說(shuō)很抽象,舉個(gè)例子:

function original(x){ this.a = 1; this.b = function(){return this.a + x}}var obj={ a = 10}var newObj = new(original.bind(obj, 2)); //傳入了一個(gè)實(shí)參2console.log(newObj.a); //輸出1, 說(shuō)明返回的函數(shù)用作構(gòu)造函數(shù)時(shí)obj(this的值)被忽略了console.log(newObj.b()); //輸出3 ,說(shuō)明傳入的實(shí)參2傳入了原函數(shù)original

以上就是ES5中bind方法的特性, 這種技術(shù)也被稱(chēng)為函數(shù)柯里化。這種技術(shù)將多個(gè)參數(shù)的函數(shù)變成只帶一個(gè)參數(shù)的函數(shù)。bind方法就是該技術(shù)在js中的實(shí)踐。

關(guān)于這篇淺談JS中的bind方法與函數(shù)柯里化就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 电白县| 宝山区| 济阳县| 平度市| 西平县| 和政县| 朝阳市| 雷州市| 南靖县| 渝北区| 兴义市| 丹寨县| 沙洋县| 临沭县| SHOW| 视频| 青岛市| 丰原市| 剑阁县| 湘潭县| 揭东县| 克东县| 五家渠市| 汉源县| 凤冈县| 苗栗市| 门源| 通河县| 锦州市| 九龙县| 吉水县| 新田县| 平江县| 措勤县| 赣州市| 丰原市| 苍溪县| 大丰市| 绵竹市| 社会| 洞头县|