Javascript循环嵌套变量
Javascript looped nested variable
有点混淆了这段代码的实际工作方式,主要是因为我从未在我的第一语言(Python)中见过这样使用变量
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {value: array[i], rest: list};
return list;
}
console.log(arrayToList([10, 20]));
// → {value: 10, rest: {value: 20, rest: null}}
我特别困惑于list
是如何和for循环一起使用的。我知道第一次通过时,列表看起来像这个list = {value: array[i], rest: null};
,但在for循环的第二次通过中,另一个列表是如何嵌套在第一个列表中的?
每次调用对象文字时,都会创建一个新对象。旧的list
指针存储在新的list
中,并且紧接着将指向新对象的指针存储在list
变量中。
list = null;
//First iteration
list = {value: 30, rest: null};
│
└────────────────────────┐
//Second iteration │
list = {value: 20, rest: list}; //<-- see this list right here?
// it's being put in before the
// assignment happens.
//so this effectively becomes
list = {value: 20, rest: {value: 30, rest: null}};
//etc.
list = {}
和list = new Object()
是一样的,所以您有时会看到像这样动态实例化对象的Javascript代码。
这两个示例表示以两种不同方式创建的同一对象。它们并不完全代表您的对象,因为我创建了新的数组,而不是在循环中显示它们:
//option 1
list = new Object();
list.value = new Array();
list.rest = list;
//option 1
list = {}; //new object
list.value = []; //new array
list.rest = list;
//recall these are each equivalent ways of creating the same object
通过循环,我看到它是一种递归构造,因为列表将自己用作属性。循环从列表的末尾30开始,然后返回到10。在第一次迭代中,rest: list
指的是在for循环开始之前仍为null的对象(列表)。这就是为什么控制台中记录的最后一个值显示为null的原因。然后从右向左读,你得到20,然后是10。
@Derek在回答过程中做得更好。
相关文章:
- 访问嵌套函数结构中的JavaScript父函数变量
- 在变量中显示或嵌套变量:Cordova、Ionic、emailComposer
- 如何在嵌套函数jquery上保持变量的值不变
- 访问带有变量的嵌套Javascript对象
- javascript和jQuery的嵌套对象函数中的变量范围
- React:使用索引变量更新嵌套集合
- Javascript循环嵌套变量
- 嵌套循环中数组2d中的javascript变量丢失
- Node.js:用作对象嵌套元素名称的变量
- 为什么嵌套的 describe() 块不能看到在外部块中定义的变量
- jquery嵌套函数中的全局变量
- 如何从嵌套函数中访问变量
- 为局部嵌套函数中的全局变量设置值
- 在全局范围内访问嵌套变量的 Nodejs
- JsRender:如何将变量传递到嵌套模板中
- JavaScript 解析带有动态变量的嵌套 JSON
- 冒泡 从嵌套函数更新变量
- Angular JS(嵌套变量)中的绑定问题
- JavaScript-如何使用递归创建变量嵌套循环
- NodeJS -如何发送一个变量嵌套回调?(MongoDB查找查询)