这个循环如何在Javascript中工作?

时间:2014-11-22 00:29:11

标签: javascript loops

我一直在尝试使用Eloquent Javascript教科书,但我无法完全理解为什么这个循环有效以构建对象列表。这是代码:

function arrayToList(myArray) {
    list = null
    for (var i = myArray.length - 1; i >= 0; i--)
    {
        list = {value: myArray[i], rest: list};
    }

    return list;
}

console.log(arrayToList[10,20]);

发送{值:10,休息:{值:20,休息:空}}

我认为它是一个递归循环,但我不知道如何正确地构建回列表。我现在可以看到的是list的value属性被分配了myArray [i]的值,然后被赋值为null。

如果有人可以向我解释这个循环如何迭代来构建这个列表,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

for循环list变量内部已分配给自身。 赋值运算符根据其右操作数 的值为其左操作数赋值,这意味着:将计算右侧,而不是将其分配给左侧

list = null
----------------
for i=1
myArray[1] = 20
list = {value: 20, rest: null}
----------------
for i=0
myArray[0] = 10
list = {value: 10, rest: {value: 20, rest: null}}

答案 1 :(得分:1)

此函数通过以相反的顺序(从最后一个元素到第一个元素)迭代myArray,构建一个包含myArray所有元素的单链表。

结果列表中的每个项目都有两个属性:

  • value:从myArray
  • 中提取的实际值
  • rest:代表列表中的所有下一项。

循环本身不是递归的,但结果对象实际上是项目的封装(类似于LISP中的cons cells)。

循环在myArray上向后迭代的原因是,以这种方式构建链表要容易得多:您需要做的就是维护列表的尾部(最初null),在它前面添加一个元素,并使用生成的“增强尾部”作为下一次迭代的基础,直到没有其他元素可用。