盘点FOREACH的一些小内容

70 阅读2分钟

    每一个程序员,在编写代码的过程中,肯定会有着一些遍历的操作,有人用最经典的for(let=0....)有人用for(let i in .... ),es6也开发出来了自己的遍历接口,通用for(let i of ....),这些准备在后面再写一篇文章详细的介绍关于let i of 这个通用遍历接口的文章,今天主要用来讲一下foreach的个人理解。
    刚开始接触变成的时候是c++,那个时候第一次写代码,也是第一次用遍历用的就是for(leti=0)这种格式的遍历,在{}中插入需要操作的代码,但是这种引用很麻烦,每次都要重新引用数组本身再使用对应下标,foreach则是以函数的方式,用参数代替遍历时候的下标和引用元素。具体方式为

arr.forEach((el,index)=>{
    //el作为arr中index下标指向的元素
)}

大部分人的应用基本都是这里,其实foreach的神奇之处更在于其的遍历方式,传统意义上的遍历都是代码块的循环执行,当循环块的代码执行结束一遍之后,才会执行下一编代码,但是foreach却是在同时以异步的方式进行遍历具体的变现用代码来诠释

function log(item) {
    return new Promise(resolve => [
        setTimeout(() => {
            resolve(item)
        }, 1000)
    ])
}
function targetarr(arr) {
    arr.forEach(el => {
        log(el)
    });
    console.log("运行结束");
}
//执行结果
//运行结束
//1
//2
//3

从这里应该可以看到foreach是以异步的方式同时遍历了,这也同时解释了如果需要遍历大数组不推荐使用foreach的原因,如果有非常大的数组需要进行遍历,我这里比较推荐的是基本的for(leti=0;i<arr.length;i++)这种方式去遍历比较节省性能