最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS高階函數(shù)原理與用法實(shí)例分析

 更新時(shí)間:2019年01月15日 11:16:51   作者:唐宋元明清.  
這篇文章主要介紹了JS高階函數(shù)原理與用法,結(jié)合實(shí)例形式分析了javascript函數(shù)式編程、一等函數(shù)、高階函數(shù)等相關(guān)概念、原理及使用技巧,需要的朋友可以參考下

本文實(shí)例講述了JS高階函數(shù)原理與用法。分享給大家供大家參考,具體如下:

如果您正在學(xué)習(xí)JavaScript,那么您必須遇到高階函數(shù)這個(gè)術(shù)語。這聽起來復(fù)雜,其實(shí)不然。

使JavaScript適合函數(shù)式編程的原因是它接受高階函數(shù)。

高階函數(shù)在JavaScript中廣泛使用。如果你已經(jīng)用JavaScript編程了一段時(shí)間,你可能已經(jīng)使用它們甚至不知道。

要完全理解這個(gè)概念,首先必須了解函數(shù)式編程是什么一等函數(shù)(first-Class Function)以及的概念。

函數(shù)式編程

在大多數(shù)簡(jiǎn)單的術(shù)語中,函數(shù)編程是一種編程形式,您可以將函數(shù)作為參數(shù)傳遞給其他函數(shù),并將它們作為值返回。在函數(shù)式編程中,我們根據(jù)函數(shù)思考和編碼。

JavaScript,Haskell,Clojure,Scala和Erlang是實(shí)現(xiàn)函數(shù)式編程的一些語言。

一等函數(shù)

如果您一直在學(xué)習(xí)JavaScript,您可能聽說過JavaScript將函數(shù)視為一等公民。那是因?yàn)樵贘avaScript或任何其他函數(shù)式編程語言中,函數(shù)是對(duì)象。

在JavaScript中,函數(shù)是一種特殊類型的對(duì)象。他們是Function對(duì)象。

在JavaScript中,您可以使用其他類型(如對(duì)象,字符串或數(shù)字)執(zhí)行的所有操作函數(shù)都可以執(zhí)行。您可以將它們作為參數(shù)傳遞給其他函數(shù)(回調(diào)函數(shù)),將它們分配給變量并傳遞它們等等。這就是JavaScript中的函數(shù)被稱為First-Class函數(shù)(一等函數(shù))的原因。

高階函數(shù)

高階函數(shù)是對(duì)其他函數(shù)進(jìn)行操作的函數(shù),可以將它們作為參數(shù)或通過返回它們。簡(jiǎn)單來說,高階函數(shù)是一個(gè)函數(shù),它接收函數(shù)作為參數(shù)或?qū)⒑瘮?shù)作為輸出返回。

例如Array.prototype.map,Array.prototype.filter并且Array.prototype.reduce是一些高階功能,內(nèi)置的語言。

運(yùn)行高階函數(shù)

讓我們看一下內(nèi)置高階函數(shù)的一些例子,看看它與我們不使用高階函數(shù)的解決方案的比較。

Array.prototype.map

map()方法通過調(diào)用作為輸入數(shù)組中每個(gè)元素的參數(shù)提供的回調(diào)函數(shù)來創(chuàng)建一個(gè)新數(shù)組。該map()方法將從回調(diào)函數(shù)中獲取每個(gè)返回值,并使用這些值創(chuàng)建一個(gè)新數(shù)組。

傳遞給回調(diào)函數(shù)map()方法接受3個(gè)參數(shù):element,index,和array。

假設(shè)我們有一個(gè)數(shù)組,我們想要?jiǎng)?chuàng)建一個(gè)新數(shù)組,其中包含第一個(gè)數(shù)組的每個(gè)值的兩倍。讓我們看看如何使用和不使用高階函數(shù)來解決問題。

不用高階函數(shù)

const arr1 = [1,2,3]; 
const arr2 = [];
for(let i = 0; i <arr1.length; i ++){ 
 arr2.push(arr1 [i] * 2); 
}
//打印[2,4,6] 
console.log(arr2);

使用高階函數(shù)

const arr1 = [1,2,3];
const arr2 = arr1.map (function (item) { 
 return item * 2; 
}
console.log(arr2)

我們可以使用箭頭函數(shù)語法使其更短

const arr1 = [1, 2, 3];
const arr2 = arr1.map(item => item * 2);
console.log(arr2);

創(chuàng)建我們自己的高階函數(shù)

到目前為止,我們看到了語言中內(nèi)置的各種高階函數(shù)?,F(xiàn)在讓我們創(chuàng)建自己的高階函數(shù)。

我們假設(shè)JavaScript沒有原生map方法。我們可以自己構(gòu)建它,從而創(chuàng)建我們自己的高階函數(shù)。

假設(shè)我們有一個(gè)字符串?dāng)?shù)組,我們希望將此數(shù)組轉(zhuǎn)換為整數(shù)數(shù)組,其中每個(gè)元素表示原始數(shù)組中字符串的長(zhǎng)度。

const strArray = ['JavaScript', 'Python', 'PHP', 'Java', 'C'];
function mapForEach(arr, fn) {
 const newArray = [];
 for(let i = 0; i < arr.length; i++) {
 newArray.push(
  fn(arr[i])
 );
 }
 return newArray;
}
const lenArray = mapForEach(strArray, function(item) {
 return item.length;
});
// prints [ 10, 6, 3, 4, 1 ]
console.log(lenArray);

在上面的例子中,我們創(chuàng)建了一個(gè)高階函數(shù)mapForEach,它接受一個(gè)數(shù)組和一個(gè)回調(diào)函數(shù)fn。此函數(shù)循環(huán)遍歷提供的數(shù)組,并在每次迭代時(shí)調(diào)用函數(shù)調(diào)用fn內(nèi)的回調(diào)函數(shù)newArray.push

回調(diào)函數(shù)fn接收數(shù)組的當(dāng)前元素并返回該元素的長(zhǎng)度,該元素存儲(chǔ)在newArray。for循環(huán)完成后,newArray返回并分配給lenArray。

結(jié)論

我們已經(jīng)了解了高階函數(shù)和一個(gè)內(nèi)置的高階函數(shù)。我們還學(xué)習(xí)了如何創(chuàng)建自己的高階函數(shù)。

簡(jiǎn)而言之,高階函數(shù)是一個(gè)函數(shù),它可以接收函數(shù)作為參數(shù),甚至可以返回一個(gè)函數(shù)。高階函數(shù)就像常規(guī)函數(shù)一樣,具有接收和返回其他函數(shù)的附加能力,即參數(shù)和輸出。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JavaScript中ES6規(guī)范中l(wèi)et和const的用法和區(qū)別

    JavaScript中ES6規(guī)范中l(wèi)et和const的用法和區(qū)別

    這篇文章主要介紹了JavaScript中ES6規(guī)范中l(wèi)et和const的用法和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Javascript處理循環(huán)的異步操作指南

    Javascript處理循環(huán)的異步操作指南

    這篇文章主要給大家介紹了關(guān)于Javascript處理循環(huán)的異步操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • JavaScript使用鏈?zhǔn)椒椒ǚ庋bjQuery中CSS()方法示例

    JavaScript使用鏈?zhǔn)椒椒ǚ庋bjQuery中CSS()方法示例

    這篇文章主要介紹了JavaScript使用鏈?zhǔn)椒椒ǚ庋bjQuery中CSS()方法,結(jié)合具體實(shí)例形式分析了JS采用鏈?zhǔn)讲僮鞣椒ǚ庾Query中連綴操作實(shí)現(xiàn)css()方法的相關(guān)技巧,需要的朋友可以參考下
    2017-04-04
  • js打開windows上的可執(zhí)行文件示例

    js打開windows上的可執(zhí)行文件示例

    這篇文章主要介紹了js如何打開windows上的可執(zhí)行文件,需要的朋友可以參考下
    2014-05-05
  • 通過隱藏iframe實(shí)現(xiàn)文件下載的js方法介紹

    通過隱藏iframe實(shí)現(xiàn)文件下載的js方法介紹

    本篇文章主要是對(duì)通過隱藏iframe實(shí)現(xiàn)文件下載的js方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • input標(biāo)簽內(nèi)容改變的觸發(fā)事件介紹

    input標(biāo)簽內(nèi)容改變的觸發(fā)事件介紹

    onchange事件在內(nèi)容改變(兩次內(nèi)容有可能相等)且失去焦點(diǎn)時(shí)觸發(fā);onpropertychange事件是實(shí)時(shí)觸發(fā),每增加或刪除一個(gè)字符就會(huì)觸發(fā)
    2014-06-06
  • js封裝的textarea操作方法集合(兼容很好)

    js封裝的textarea操作方法集合(兼容很好)

    對(duì)應(yīng)用到對(duì)textarea處理的朋友可以參考下??刂频谋容^不錯(cuò)的代碼封裝。
    2010-11-11
  • JavaScript?中的作用域與閉包

    JavaScript?中的作用域與閉包

    這篇文章主要介紹了JavaScript中的作用域與閉包,JavaScript是一種具有函數(shù)優(yōu)先的輕量級(jí),解釋型或即時(shí)編譯型的編程語言,下文是更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-05-05
  • phpwind放自動(dòng)注冊(cè)方法

    phpwind放自動(dòng)注冊(cè)方法

    phpwind放自動(dòng)注冊(cè)方法...
    2006-12-12
  • js日期格式化yyyy-MM-dd問題

    js日期格式化yyyy-MM-dd問題

    這篇文章主要介紹了js日期格式化yyyy-MM-dd問題,具有很好的參考價(jià)值,希望對(duì)大家大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論

施甸县| 江阴市| 灵宝市| 葫芦岛市| 沂水县| 故城县| 奉贤区| 岚皋县| 岚皋县| 恩施市| 关岭| 容城县| 花莲市| 新源县| 阜新市| 建昌县| 潼关县| 大安市| 大安市| 东台市| 祁连县| 星子县| 河源市| 保德县| 辛集市| 木兰县| 麟游县| 沽源县| 丹凤县| 桐乡市| 张北县| 泸溪县| 敦煌市| 格尔木市| 乌苏市| 靖边县| 崇信县| 柯坪县| 珲春市| 哈密市| 凉城县|