为什么要在为发电机再次设置变量后为发电机设置变量? (这种情况与普通的生成器示例不同)

问题描述 投票:0回答:1

为生成器设置变量后让基因= generator();

通常,我需要做的是gene.next()迭代上面制作的生成器。但是,在下面的示例中,(有关完整代码,请参阅链接)

https://codepen.io/jotnajoa/pen/MWwzpJJ

再次为生成器设置变量后,将设置另一个变量。我不知道为什么会这样。另外,我没有得到

的一部分
let result = genratorAnimation.next();
//genratorAnimation.next();
let interval = setInterval(function(){
   if(!result.done) {
     genratorAnimation.next();
   }
   else {
    clearInterval(interval)
   }
}, 50);

此代码末尾。因为据我了解,当一切都产生时,生成器将对“完成”返回“ true”。

但是,在此示例中,它正在做相反的事情。这是“ not result.done”,在运行生成器时为假。

为什么?

作为总结,

1)为什么需要为间隔设置另一个变量。

我假设setInterval(########)就足够了,而不是让xxx = setInterval来运行循环。因为,如果我为setInterval设置变量,在输入变量“ xxx”之前,什么都不会发生。但是在这段代码中,即使我不调用该变量,它也正在运行。

2)为什么!result.done使循环播放。因为!result.done为false,并且if语句中如果为false,则if无法运行。

If语句仅在条件为真时运行。是不是

先谢谢您。

javascript d3.js generator data-visualization
1个回答
0
投票

为什么需要为间隔设置另一个变量。

setInterval()用于重复调用函数或执行代码段,每次调用之间有固定的时间延迟。这意味着如果不停止通过调用setInterval()函数,将永远调用并执行提供给clearInterval()函数的函数。

clearInterval()需要一个间隔引用(变量),在此代码段中,我们可以获取代码而无需清除间隔,但是它将继续运行并最终消耗资源内存/ CPU,因此最好将其从内存中删除。执行队列。

为什么!result.done使循环播放。

生成器函数将继续将result.done作为false返回,直到返回最后一个结果,它将返回true:和!(逻辑非)用于取反Boolean值,因此如果result.done为否,!result.done将取反并将其设为true。它在您的代码段中的编写方式与编码风格有关,可以编写为:

let result = genratorAnimation.next();
//genratorAnimation.next();
let interval = setInterval(function(){
   if(result.done) {
     clearInterval(interval);
   }
   else {
    genratorAnimation.next();
   }
}, 50);
© www.soinside.com 2019 - 2024. All rights reserved.