ImmutableJS是否跳过未使用的代码块?

时间:2017-09-08 23:32:10

标签: javascript immutable.js

我正在使用Immutable.js代码并注意到一些时髦的东西。 Immutable.js是否会跳过保存到不会被使用的变量的代码?

const Immutable = require('immutable')

function transformErrors(errors) {
    let key = errors.keySeq()
    let mapped = key.map((v, keystr) => {
      console.log(v, keystr)
      return keystr
    })
  // If I enable the console log below, console log above works
  // console.log('mapped', mapped) 
};
const result = transformErrors(Immutable.fromJS([1, 2]));

对于上面的代码,如果

console.log('mapped', mapped)

被禁用,映射代码不会被调用。 我仔细阅读了文档,但无法找到任何评论

1 个答案:

答案 0 :(得分:1)

行:let key = errors.keySeq()将返回一个Seq对象,该对象在immutable.js中是惰性的。

该文档提供了以下详细信息(https://facebook.github.io/immutable-js/docs/#/Seq):

  

Seq是懒惰的 - Seq尽可能少地响应任何方法调用。值通常在迭代期间创建,包括在减少或转换为具体数据结构(如List或JavaScript数组)时的隐式迭代。   例如,以下内容不起作用,因为从不迭代生成的Seq值:

const { Seq } = require('immutable')
const oddSquares = Seq([ 1, 2, 3, 4, 5, 6, 7, 8 ])
  .filter(x => x % 2 !== 0)
  .map(x => x * x)

因此,在您的示例中,在mapped被用于某处之前,immutable.js不会实际评估您的地图函数。