就安全性而言,map for for loop的好处

时间:2018-10-27 23:37:03

标签: javascript

在谈论通过map循环使用for时,我对“提供不变性”的含义有一个模糊的理解。因为在数组上调用Array.prototype.map不会阻止您更改原始数组。假设我们有单线程异步程序。在这些情况下,map是否提供了for循环上的“不变性”好处?

我可以想象以下代码:

function A() {
    const arr = [1, 2, 3, 4, 5]
    const anotherArr = arr.map((e, i) => {
        arr[i] = 'changed'
        // here goes some asynchronous code
        return e * 2
    })
    // now arr is ['changed', 'changed', 'changed', 'changed', 'changed']
    // and anotherArr is [2, 3, 6, 8, 10]
}

function B() {
    const arr = [1, 2, 3, 4, 5]
    const anotherArr = []
    for (let i = 0, len = arr.length; i < len; i++) {
        anotherArr[i] = arr[i] * 2
        arr[i] = 'changed'
        // here goes some asynchronous code
    }
    // and again:
    // now arr is ['changed', 'changed', 'changed', 'changed', 'changed']
    // and anotherArr is [2, 3, 6, 8, 10]
}

我猜想可能是在函数B anotherArr中是在填充之前手动创建的。因此,在for循环完成之前,具有相同作用域的某些对象可以对其进行更改。所以我的问题是:“就安全性而言,在单线程异步环境中使用map而非for循环是否有好处?”

编辑

我重新回答我的问题:“ Array.prototype.map是否起作用? 提供(因为它属于功能范式)”。 据我所知,javascript中的map函数与不变性无关, 它是关于隐藏一些实现细节(如何构造结果数组)。 因此map函数是一种声明式的处理方式。 for循环势在必行 做事的方式(我猜这带来了更多的自由和更多的责任)。

1 个答案:

答案 0 :(得分:-1)

映射,缩小,过滤,forEach等

在我看来,以上方法对FP(函数式编程)非常有用。

当然,您可以使用它们代替普通的for循环, 但是普通的for循环比它们快(https://hackernoon.com/javascript-performance-test-for-vs-for-each-vs-map-reduce-filter-find-32c1113f19d7)。

所以在我看来,如果您不关心性能,则使用map,reduce等方法会很优雅,并且代码会越来越少可读。