gpt4 book ai didi

javascript - 这是一个有效的模式吗?它叫什么?

转载 作者:行者123 更新时间:2023-11-28 18:32:12 24 4
gpt4 key购买 nike

我发现自己越来越多地编写以下 JavaScript,我想知道这是否是一种常见模式,如果是,它叫什么?

部分代码及模式:

var fruits = ["pear", "apple", "banana"];

var getNextFruit = function() {
var _index = 0,
_numberOfFruits = fruits.length;

getNextFruit = function() {
render(fruits[_index]);
_index = (_index + 1) % _numberOfFruits;
}
getNextFruit();
};

我有一个不带参数的函数,在函数内部我重新定义了该函数并立即调用它。在函数式语言中,这可能是一个被返回的函数,JavaScript 只是让它变得更容易,因为你可以重用函数的名称。因此,您无需更改实现即可扩展功能。

我还可以想象这种模式对于内存非常有用,其中您的“缓存”是我们环绕的状态。

有时我什至会在函数上使用 getset 方法来实现此功能,这样我就可以获取有意义的状态。添加的 fiddle 显示了一个这样的例子。

因为这是一个主要面向 JavaScript 的问题:The obligatory fiddle

最佳答案

I have a function which takes no parameters, inside the function I redefine the function and immediately call it. Is this is a valid pattern and what is it called?

重新定义自身的函数通常是一种反模式,因为它使事情变得更加复杂。是的,有时交换整个函数比在函数内放置 if (alreadyInitialized) 条件更有效,但很少值得这样做。当您需要优化性能时,您可以尝试对这两种方法进行基准测试,但除此之外,建议保持尽可能简单。

“在第一次调用时初始化自身”模式被称为 laziness用于纯计算(在函数式编程中)并作为 singleton对于对象(在 OOP 中)。

但是,大多数时候没有理由推迟对象/函数/模块的初始化,直到第一次使用为止。为此占用的资源(时间和内存)是微不足道的,特别是当您确定您的程序中至少需要一次它时。为此,请使用 IIFE在 JavaScript 中,也称为 module pattern创建对象时。

关于javascript - 这是一个有效的模式吗?它叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777548/

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