为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 ind = index1() 的值不是 || 索引2();其中 index1()

为什么 ind = index1() 的值不是 || 索引2();其中 index1()

慕斯709654 2021-10-14 14:31:29
我有一个函数 concat() ,它从某个开始到某个结束接受生成器函数,并通过组合两个生成器来充当另一个生成器。例如,如果第一个生成器函数生成一个从 0 到 2 的数字,第二个生成器生成一个从 0 到 1 的数字,则 concat() 生成 (0, 1, 2, 0, 1) 以供以后未定义的调用使用。实现 concat() 后,在测试时,它返回 (0, 1, 2, 1) 以供以后未定义的调用使用。它跳过第二个生成器函数的第一个生成值。我已经改变了我实施的方式并且它有效,但我不明白为什么它不适用于另一个。我试图打印返回的立即结果,我发现 0 被跳过,因为第二个生成器和第一个生成器在放入 OR 操作时返回给 undefined 为第二个生成器的第一个值,正如我之前放置的 console.log 所指出的回来。我不知道为什么会这样。多行注释代码按预期工作。两者有什么不同?const from = (start) => {  return () => {    const next = start;    start += 1;    return next;  };};const to = (fromIndex, end) => {  return () => {    const at = fromIndex();    if (at < end) {      return at;    }    return undefined;  };};const fromTo = (start, end) => {  return to(from(start), end);};const concat = (index1, index2) => {  return () => {    let ind = index1() || index2();    // console.log(ind);    return ind;    /*                // THIS WORKS AS EXPECTED:           ind = index1();          if (ind !== undefined) {            return ind;          }          ind = index2();          if (ind !== undefined) {            return ind;          }          */  };};const con = concat(fromTo(0, 3), fromTo(0, 2));console.log('con(): ', con()); // 0console.log('con(): ', con()); // 1console.log('con(): ', con()); // 2console.log('con(): ', con()); // 1 but expecting 0console.log('con(): ', con()); // undefined but expecting 1我希望在控制台中打印如下:        con(): 0        con(): 1        con(): 2        con(): 1 // but expecting 0        con(): undefined // but expecting 1
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这是因为你有一个真实的检查


当您致电index1()Return 时0。你有一个或。这里的问题是 or 说“0不真实”所以移到index2()


所以你不能只是做那个简单的检查,因此你的其他版本为什么有效。你能得到的最接近的东西是这样的。


const concat = (index1, index2) => {

  return () => {

    const ind = index1()

    return ind !== undefined ? ind : index2()

  }

}


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信