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

拆開JavaScript迭代器模式內(nèi)部黑盒子

 更新時間:2022年12月22日 09:08:09   作者:qb  
這篇文章主要為大家介紹了JavaScript迭代器模式內(nèi)部黑盒子解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、內(nèi)部迭代器

迭代器模式,指的是提供一種方法順序訪問一個聚合對象或者數(shù)組中的各種元素,而又不暴露該對象的內(nèi)部表示。

內(nèi)部迭代器是自動的,將回調(diào)函數(shù)傳入迭代器進(jìn)行執(zhí)行,訪問到每一個元素都會執(zhí)行傳入迭代器中的回調(diào)函數(shù)。

模擬內(nèi)部迭代器如下:

// 定義數(shù)組原型上的mapFn內(nèi)部迭代器
Array.prototype.mapFn = function (callback) {
    let arr = this;
    let newArr = []
    for (let i = 0; i < arr.length; i++) {
        newArr[i] = callback(arr[i], i, arr)
    }
    return newArr
}
// 定義原始數(shù)組
var arr = [1, 2, 3, 4, 5];
// 定義回調(diào)函數(shù)
var callback = val => val * 2;
// 執(zhí)行數(shù)組的mapFn方法調(diào)用回調(diào)函數(shù)callback
var newArr = arr.mapFn(callback);
// 打印返回值
console.log(newArr)

callback函數(shù)可以傳入三個參數(shù),第一個參數(shù)表示當(dāng)前的值,第二個參數(shù)表示當(dāng)前索引,第三個參數(shù)表示正在操作的數(shù)組。返回值為新數(shù)組。

當(dāng)前例子中,callback指的是val => val * 2,通過數(shù)組的mapFn方法執(zhí)行callback函數(shù),返回值為新的數(shù)組newArr。

在實際的使用中,Array.prototype.mapFn的內(nèi)部實現(xiàn)是看不到的,就像我們看不到數(shù)組的操作mapforEach一樣,這里如果將Array.prototype.mapFn作為黑盒子。就有如下的流程:

二、外部迭代器

外部迭代器是非自動的,提供了next方法,需要手動的去執(zhí)行next()以進(jìn)行下一個元素的訪問。

// 定義迭代器生成函數(shù)
function makeIterator(array) {
    var nextIndex = 0;
    return {
        next: function () {
            return nextIndex < array.length ? {
                value: array[nextIndex++],
                done: false
            } : {
                value: undefined,
                done: true
            };
        }
    };
}
// 產(chǎn)生迭代器
var it = makeIterator(['a', 'b']);
// 通過迭代器暴露出來的next方法,外部調(diào)用迭代器
console.log(it.next()) // { "value": "a", "done": false }
console.log(it.next()) // { "value": "b", "done": false }
console.log(it.next()) // { "value": undefined, "done": true }

makeIterator返回next方法,每一次執(zhí)行都會執(zhí)行下一個迭代。done是否迭代結(jié)束,value是當(dāng)前迭代獲取到的值。如果donetrue,對應(yīng)的value就是undefined。

在實際的使用中,makeIterator的內(nèi)部實現(xiàn)是看不到的,這里如果將makeIterator作為黑盒子。就有如下的流程:

總結(jié):

目前JavaScript已經(jīng)內(nèi)置了多種內(nèi)部迭代器,比如forEach、mapfilterreduce等,內(nèi)部執(zhí)行回調(diào)函數(shù)function(value, index, currentArr){ xxxx }對每個訪問到的元素進(jìn)行處理。通過generateyield配合使用也可以產(chǎn)生外部迭代器,通過next()方法進(jìn)行下一步的執(zhí)行。

以上就是拆開JavaScript迭代器模式內(nèi)部黑盒子的詳細(xì)內(nèi)容,更多關(guān)于JavaScript迭代器模式內(nèi)部黑盒子的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js實現(xiàn)點贊效果

    js實現(xiàn)點贊效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)點贊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 原生js實現(xiàn)上傳圖片控件

    原生js實現(xiàn)上傳圖片控件

    這篇文章主要為大家詳細(xì)介紹了原生js實現(xiàn)上傳圖片控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 終于解決了IE8不支持?jǐn)?shù)組的indexOf方法

    終于解決了IE8不支持?jǐn)?shù)組的indexOf方法

    今天,測試報過來一個js bug, 在IE8下有個js錯誤,但是在其它瀏覽器下(Firefox, Chrome, IE9)下面都很正常。后來調(diào)試發(fā)現(xiàn)原因是在IE8下,js數(shù)組沒有indexOf方法。
    2013-04-04
  • 微信公眾號獲取用戶地理位置并列出附近的門店的示例代碼

    微信公眾號獲取用戶地理位置并列出附近的門店的示例代碼

    這篇文章主要介紹了微信公眾號獲取用戶地理位置并列出附近的門店的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • JavaScript ES2019中的8個新特性詳解

    JavaScript ES2019中的8個新特性詳解

    這篇文章主要介紹了JavaScript ES2019中的8個新特性詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • JavaScript實現(xiàn)新年倒計時效果

    JavaScript實現(xiàn)新年倒計時效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)新年倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 關(guān)于javascript中json 對象數(shù)組之間相互轉(zhuǎn)化問題

    關(guān)于javascript中json 對象數(shù)組之間相互轉(zhuǎn)化問題

    這篇文章主要介紹了關(guān)于javascript中json 對象數(shù)組之間相互轉(zhuǎn)化問題,在實際應(yīng)用中,JSON對象和數(shù)組的結(jié)構(gòu)可能更加復(fù)雜,需要根據(jù)具體情況進(jìn)行相應(yīng)的處理和轉(zhuǎn)換,需要的朋友可以參考下
    2023-07-07
  • JS實現(xiàn)獲取剪貼板內(nèi)容的方法

    JS實現(xiàn)獲取剪貼板內(nèi)容的方法

    這篇文章主要介紹了JS實現(xiàn)獲取剪貼板內(nèi)容的方法,涉及javascript基于clipboardData操作剪貼板的相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • JavaScript中的for...of和for...in循環(huán)容易遇到的問題及解決方法總結(jié)

    JavaScript中的for...of和for...in循環(huán)容易遇到的問題及解決方法總結(jié)

    在 JavaScript 編程中,for...of 和 for...in 是常用的循環(huán)語法,但它們在使用時可能會引發(fā)一些意想不到的問題,本文將分享我在使用這兩種循環(huán)時所遇到的坑和經(jīng)驗,需要的朋友可以參考下
    2023-08-08
  • Vue formData實現(xiàn)圖片上傳

    Vue formData實現(xiàn)圖片上傳

    這篇文章主要為大家詳細(xì)介紹了Vue formData實現(xiàn)圖片上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論

金乡县| 江西省| 吉木乃县| 富阳市| 剑河县| 孟州市| 涞源县| 昆明市| 都安| 阳新县| 玛曲县| 昌宁县| 正镶白旗| 保康县| 姚安县| 胶州市| 昭觉县| 增城市| 东台市| 崇信县| 平泉县| 长治县| 洛扎县| 玉环县| 曲水县| 宁阳县| 修文县| 澎湖县| 丽江市| 垫江县| 通道| 花莲县| 防城港市| 南投市| 琼中| 商都县| 台中县| 大安市| 和平县| 宁化县| 阿鲁科尔沁旗|