淺談JS中的bind方法與函數(shù)柯里化
綁定函數(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ù)sum succ(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為4 var after = func.bind(null,1,2); //這里輸入了兩個(gè)實(shí)參(1,2)綁定到了func函數(shù)的a,b console.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í)參2 console.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ù)也被稱為函數(shù)柯里化。這種技術(shù)將多個(gè)參數(shù)的函數(shù)變成只帶一個(gè)參數(shù)的函數(shù)。bind方法就是該技術(shù)在js中的實(shí)踐。
關(guān)于這篇淺談JS中的bind方法與函數(shù)柯里化就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 前端JavaScript徹底弄懂函數(shù)柯里化curry
- 怎樣用Javascript實(shí)現(xiàn)函數(shù)柯里化與反柯里化
- JavaScript函數(shù)柯里化實(shí)現(xiàn)原理及過(guò)程
- 淺析JavaScript 函數(shù)柯里化
- js函數(shù)柯里化的方法和作用實(shí)例分析
- javascript實(shí)現(xiàn)函數(shù)柯里化與反柯里化過(guò)程解析
- JavaScript函數(shù)柯里化原理與用法分析
- Javascript閉包與函數(shù)柯里化淺析
- JavaScript函數(shù)柯里化詳解
- JavaScript函數(shù)柯里化
相關(guān)文章
微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03解決layui彈出層layer的area過(guò)大被遮擋的問(wèn)題
今天小編就為大家分享一篇解決layui彈出層layer的area過(guò)大被遮擋的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JavaScript中的一些隱式轉(zhuǎn)換和總結(jié)(推薦)
這篇文章主要介紹了JavaScript中的一些隱式轉(zhuǎn)換和總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12JS設(shè)計(jì)模式之訪問(wèn)者模式的用法詳解
JS訪問(wèn)者模式是一種行為型設(shè)計(jì)模式,用于將算法與對(duì)象結(jié)構(gòu)分離, 該模式允許你定義新的操作(訪問(wèn)者)而無(wú)需修改現(xiàn)有對(duì)象結(jié)構(gòu)(被訪問(wèn)者), 通過(guò)這種方式,你可以在不改變對(duì)象結(jié)構(gòu)的情況下添加新的操作,本文就給大家詳細(xì)的講講JS訪問(wèn)者模式的用法2023-08-08實(shí)例分析JS與Node.js中的事件循環(huán)
本篇文章通過(guò)實(shí)例給大家詳細(xì)分析了JS與Node.js中的事件的原理以及用法,大家學(xué)習(xí)一下吧。2017-12-12JS實(shí)現(xiàn)問(wèn)卷星自動(dòng)填問(wèn)卷腳本并在兩秒自動(dòng)提交功能
這篇文章主要介紹了JS實(shí)現(xiàn)問(wèn)卷星自動(dòng)填問(wèn)卷腳本兩秒自動(dòng)提交功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2017-08-08弱類型語(yǔ)言javascript中 a,b 的運(yùn)算實(shí)例小結(jié)
這篇文章主要介紹了弱類型語(yǔ)言javascript中 a,b 的運(yùn)算,結(jié)合實(shí)例形式總結(jié)分析了js閉包函數(shù)中布爾值與字符串的a,b運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-08-08