行为问题:
为什么Ninja.getArrayFromInside()返回一个空数组? (在Ninja.array修改之后)
let Ninja = (function() {
let array = [];
function getArrayFromInside() {
return array;
}
return {
array, getArrayFromInside
};
})();
Ninja.array = [1, 2];
console.log(Ninja.getArrayFromInside());
我认为,这是关于通过价值或参考传递...... (为什么数组按值传递,而不是按引用传递?)
同样的问题:
let Ninja = (function() {
let myObject = {};
myObject.array = [];
function getArrayFromInside() {
return myObject.array;
}
return {
array: myObject.array,
getArrayFromInside
};
})();
Ninja.array = [1, 2];
console.log(Ninja.getArrayFromInside());
答案 0 :(得分:3)
在第一个示例中,有两个名为array
的变量:let array = [];
函数捕获的内部作用域中声明为getArrayFromInside
的变量,以及属性Ninja.array
。 这是两个不同的变量。 array
引用的第一个变量。您可以在this.array
函数中getArrayFromInside
引用的第二个。
将它们初始化为对同一数组对象(最初为空)的引用。然后,您指定Ninja.array
来引用另一个对象:数组[1, 2]
。这不会修改let array ...
变量;因为函数获取let array
的值,它返回原始的,仍为空的数组对象。
尝试将Ninja.array = [1, 2];
更改为Ninja.array.push(1);Ninja.array.push(2);
。您会看到像这样修改原始数组会导致更改反映在Ninja.getArrayFromInside()
调用中。
答案 1 :(得分:0)
在第一个示例中,dict1 = [{'ledecky': 1, 'king': 2, 'vollmer': 3},
{'ledecky': 1, 'vollmer': 2, 'king': 3},
{'schmitt': 1, 'ledecky': 2, 'vollmer': 3}]
medal_value = {1 : 10.0, 2 : 5.0, 3 : 3.0}
print calculate_points(dict1, medal_value)
>>> {'ledecky': 25.0, 'king': 8.0, 'schmitt': 10.0, 'vollmer': 11.0}
不是array
的类成员。 Ninja
会返回this.array
。
第二个例子相同。