gpt4 book ai didi

使用闭包的 Javascript Fibonacci

转载 作者:行者123 更新时间:2023-12-03 12:31:49 26 4
gpt4 key购买 nike

我将使用 Javascript 编写一些代码。这是我们要做的:

“使用闭包实现一个 javascript 斐波那契数列。具体来说,编写一个函数来存储两个连续的斐波那契数列,最初是 0 和 1。该函数还定义并返回一个嵌套函数 getNext()。getNext() 函数更新两个将斐波那契数存储到下两个斐波那契数并返回当前数。例如,在第一次调用 getNext() 时,返回值为 0,在下一次调用时返回值为 1,然后再次为 1,然后为 2,等等。”

我有点理解这个,但不是真的。有人可以帮忙澄清一下吗?谢谢!

最佳答案

闭包背后的基本思想是,由于闭包按值绑定(bind)所有本地数据,您可以使用它们来初始化然后修改仅对生成函数的“实例”而言是本地的变量。

因为这看起来像是家庭作业,所以我将使用闭包来回答一个不同的问题:使用闭包来获得完美的正方形(1、4、9 等),一次一个。

function makeSquareIteratorFunction() {
var squareRoot = 1;

var getNext = function() {
// Calculate the number you need to return
var square = squareRoot * squareRoot;

// Apply side effects. In this case just incrementing the counter, but with
// Fibonacci you will need to be a little more creative :-)
// You might also prefer to do this first. Depends on your approach.
squareRoot = squareRoot + 1;

// Return the value
return square;
};

// Return the function object, which can then be called later
return getNext;
}

// Usage
var getNextSquare = makeSquareIteratorFunction();
alert(getNextSquare()); // 1
alert(getNextSquare()); // 4
alert(getNextSquare()); // 9

现在,值得指出的是,在外部函数 (makeSquareIteratorFunction) 中定义的局部变量已本地化并绑定(bind)到闭包。因此,如果多次调用 makeSquareIteratorFunction(),后面的将独立于第一个:

var getNextSquare1 = makeSquareIteratorFunction();
alert(getNextSquare1()); // 1
alert(getNextSquare1()); // 4
var getNextSquare2 = makeSquareIteratorFunction();
alert(getNextSquare2()); // 1 (!) because it's a new closure, initialized the same way
alert(getNextSquare1()); // 9 (!) because it was "on" 4 last time

希望这有助于解释一下?如果没有,请发表评论。 :-)

关于使用闭包的 Javascript Fibonacci,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com