【问题标题】:why do I set a variable for generator after setting a variable for a generator again ? (This case is different from ordinary generator examples)为什么在再次为生成器设置变量后为生成器设置变量? (本案例不同于普通的生成器示例)
【发布时间】:2020-03-26 03:24:42
【问题描述】:

在为生成器设置变量后,例如 让基因 = 生成器();

通常,我需要做的是 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);

在此代码的末尾。 因为,据我了解,当一切都产生时,生成器会为“完成”返回“真”。

然而,在这个例子中,它正在做相反的事情。这是“not result.done”,在运行生成器时是错误的。

为什么会这样?

总结一下,

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

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

2) 为什么 !result.done 使循环播放。 因为 !result.done 是 false 并且如果 false 在 if 语句中,事情会发生在 if 之后不会运行。

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

提前谢谢你。

【问题讨论】:

    标签: javascript d3.js generator data-visualization


    【解决方案1】:

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

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

    clearInterval() 需要一个区间引用(变量),在这个 sn-p 中我们可以在不清除区间的情况下编写代码,但它会继续运行并消耗资源内存/CPU,最终没有任何影响,所以最好删除它来自执行队列。

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

    生成器函数将继续以false 返回result.done,直到返回最后一个结果,它将返回true: 和!(逻辑非)用于否定Boolean 值所以如果result.done为假,!result.done 将否定它并使其成为true。它在您的代码 sn-p 中的编写方式是编码风格的问题,它可以写成:

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

    【讨论】:

    • 非常感谢。特别清楚!!我明白 setInterval() 应该无限运行。但是,在代码 sn-p 中,为了运行 setInterval,我是否必须至少键入一次变量来启动它?因为仅仅设置一个变量并不意味着该变量被执行。比如 let abc = function xxx{} 本身并不执行 xxx()。
    • @Soonk,如果你的意思是 setinterval() 函数它已经在执行并且变量将保存 setInterval(function(){}, timeout); 的值,这将由浏览器确定。
    • 假设您定义了一个函数并将其保存为变量,例如 var fun1 = function(){console.log('hi')};这并不意味着 func1 被执行。要执行它,我需要在定义之后键入 fun1() 。但是,在这里,即使我没有键入 interval(); 也会执行 let interval= setInterval(....);定义函数后。为什么?
    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2021-07-11
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多