为什么这不是无限循环?

jse*_*tes 2 javascript

我正在读这个例子,我坚持理解一行.我需要了解一切,所以我无法继续前进.

该函数应该隐藏对象内的所有元素.它应该工作.但对我来说,for循环看起来像是无限的.为什么不呢?

getChild: function (i) {
    return this.children[i];
},

hide: function () {
    for (var node, i = 0; node = this.getChild(i); i++) {
        node.hide();
    }

    this.element.hide(0);
},
Run Code Online (Sandbox Code Playgroud)

从我看到的,该函数使用getChild(0)获取对象的第一个元素,然后再次在该0维对象上调用hide.然后它重置计数器(i)并获取0维对象的第一个元素(它是相同的0-dim对象)并再次调用该函数.

我知道我错了,但这就是我所看到的.请告诉我光明!谢谢

Som*_*ens 7

for如上所述的循环中,第一个bit(var node, i = 0)仅在循环开始时执行一次.当middle section(node = this.getChild(i);)返回false 时,循环停止执行. getChild当索引没有任何内容时,它将返回false i.(从技术上讲,它会返回undefined,但false在这种情况下等同于此).

其次,即使hide()在for循环中调用,i也不会重置.为什么?此递归调用创建一个hide()与原始实例分开的新实例.这个新变量中的所有变量hide()都与原始变量分开.(等等,沿着兔子洞).

有关for循环的更多信息,请参见http://www.tizag.com/javascriptT/javascriptfor.php.