gpt4 book ai didi

javascript - 我可以在 JavaScript 中获取生成器的当前值吗?

转载 作者:行者123 更新时间:2023-12-04 14:01:34 27 4
gpt4 key购买 nike

假设我想在点击时为我的按钮轮换类名。单击一次变为 button-green,单击两次 - button-yellow,三次 - button-red。然后它会重复,所以第四次点击会使其再次变为 button-green

我知道其他技术如何做到这一点,我不是在寻求实现建议。我编写这个示例是为了了解有关 JavaScript 中的生成器的一些知识。

这是我的生成器代码:

function* rotator(items) {
while (true) {
for (const item of items) {
yield item;
}
}
}

const classRotator = rotator([
'button-green',
'button-yellow',
'button-red',
]);

document.getElementById('my-button').addEventListener('click', event => {
event.currentTarget.classList.add(classRotator.next().value);
});

它工作正常,除了它永远不会摆脱上一个类。最方便的方法是在获取下一个状态之前读取当前状态:

// .current is not a thing:
event.currentTarget.classList.remove(classRotator.current);

我当然可以把这个值自己留着用。同样,我可以自己清除在 rotator() 中使用的所有类。我什至可以让我的生成器函数 yield 包含先前值和当前值:

function* rotator(items) {
let previous;

while (true) {
for (const item of items) {
yield {
item,
previous
};

previous = item;
}
}
}

然后像这样使用它:

document.getElementById('my-button').addEventListener('click', event => {
const {item: className, previous: previousClassName} = classRotator.next().value;

event.currentTarget.classList.remove(previousClassName);
event.currentTarget.classList.add(className);
});

但这不是重点 - 出于教育目的,我问这个问题:

我可以在 JavaScript 中读取生成器函数的当前值吗?如果不是,是否避免在不需要时使用内存(这个值可能非常大)?

最佳答案

Can I read the current value of generator function in JavaScript?

没有。

但是你可以easily implement this yourself如果你愿意的话。

If not, is it to avoid using memory when it's not needed?

也许吧。迭代器应该不依赖于它生成的最后一个值,以允许独立的垃圾收集并降低保留耗尽或尚未完成的生成器的成本。

但我认为设计中没有可用的 .current 字段的主要原因是从理论的 Angular 来看它没有意义:在迭代开始之前该字段有什么值(value),还是在迭代器耗尽之后?人们可能会选择 undefined,但干净的设计根本就没有该字段,只有在您实际执行迭代器时才会返回值。

关于javascript - 我可以在 JavaScript 中获取生成器的当前值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69867197/

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