【问题标题】:Javascript sequences with an array of function calls带有函数调用数组的 Javascript 序列
【发布时间】:2016-11-17 16:18:35
【问题描述】:

序列(开始,步骤)

这个函数接受两个数字输入,开始和停止,并返回一个没有输入的函数。生成的函数将生成从 start 开始并按步偏移的值序列每个函数调用将生成序列中的下一个值。 例子

var x = sequence( 3, 15 );
[ x(), x(), x() ] => [ 3, 18, 33 ]
var y = sequence( 28, -5 );
[ y(), y(), y() ] => [ 28, 23, 18 ]

我该如何解决这个问题?

【问题讨论】:

  • 这是一个提示,调用序列返回一个函数,这个函数需要自己的作用域。走得更远会被宠坏。
  • 如果您不尝试,我们只是在为您解决问题。如果您展示您尝试过的内容,以及错误消息以及实际与预期的行为,我们可以查明您做错了什么,并且您会学到更多。

标签: javascript arrays function sequences


【解决方案1】:

sequence 不只是返回一个函数。它返回一个带有闭包的函数,该闭包跟踪开始/步骤值。所以 start、step 和 counter 都与它绑定。所以你可以和他们一起工作。

function sequence(start, step) {
  var counter = -1;
  return function() {
    // This is the function that will return the next element
    // It uses the counter, start, step variables from its closure
    // Notice they live outside of the inner function so the counter is not reset
    // every time you run this function.
    counter++;
    return start + step * counter;
  };
};

var x = sequence(1, 3);
var y = sequence(-1, -2);

console.log('x()', x(), x(), x());
console.log('y()', y(), y(), y());

【讨论】:

  • @JLRishe 你没有收到警告说你正在覆盖更高版本吗?
  • 评论清理时间 :) 这些现在都无关紧要了。请删除你自己的cmets
猜你喜欢
  • 2013-03-15
  • 2021-04-09
  • 2012-12-15
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多