javascript - 如何从闭包函数调用中返回相同的值 n 次?

标签 javascript function for-loop closures

我想做的是让一个闭包返回相同的值n次。

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

然后我应该得到:

value() // returns 0
value() // returns 0
value() // returns 0
value() // returns 315
value() // returns 315
value() // returns 315
value() // returns 270
value() // returns 270
value() // returns 270

这就是我尝试过的!

  function getCurrentValue(values, num) {
    let index = -1;
    let l = values.length;

    function increment() {
      ++index;
      if (index < l) {
        return values[index]
      } else {
        index = -1;
        ++index;
        return values[index]
      }
    }

    if (num)  {
     for (var i = 0; i < num; i++){
      return increment         
     }
   }


    return increment;
  }

如有任何帮助,我们将不胜感激!

最佳答案

这是我的 generator解决方案&关闭方案

// generator solution
function* getCurrentValueIter(iter, times) {
  for (let i = 0; i < iter.length * times; i++) {
    const cur = Math.floor(i / times);
    yield iter[cur]
  }
}

console.log('generate')
const valueIter = getCurrentValueIter([0, 1], 2)
for (let value of valueIter) {
  console.log(value)
}
// you can also use valueIter manually
// console.log(valueIter.next().value)

// closure solution
function getCurrentValue(iter, times) {
  let i = 0
  function value() {
    while (i < iter.length * times) {
      const cur = Math.floor(i / times);
      i += 1
      return iter[cur]
    }
  }
  return value
}

const value = getCurrentValue([0, 1], 2)
console.log('closure', value())
console.log(value())
console.log(value())
console.log(value())

关于javascript - 如何从闭包函数调用中返回相同的值 n 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72509246/

相关文章:

Grails 异步 Promise/for 循环错误 - 如何将变量传递给任务闭包

java - 简单的 for 语句不会继续循环?

javascript - Vue.js 的 window 属性很奇怪

java - 将 HTML 字符串传递给 jQuery 函数

javascript - AngularJS Controller 如何访问非 AngularJS iframe 中的函数?

c - 在函数中传递数组以对其元素求和

c - 规则 14.2 for 循环应符合 MISRA C 2012 的格式

javascript - 无法从 Youtube IFrame 更改焦点

javascript - 如何在 JavaScript 中混合变量和循环索引?

php - while 循环将自定义函数应用于 mysql_fetch_assoc