我的代码中有一个模块,我无法更改Object的属性值。我在代码中有更详细的解释,见下文:
var network = (function(){ // Created a closure.
var ajax = {
response: 0, // I set the initial value of response to 0
parse: function(x){
var y = JSON.parse(x);
ajax.response = y; // This is where things don't seem to work. Value of response is still 0.
}
// Some other code.
} // End of ajax object.
return { // I return an Object .
invoke: function(x){ ajax.parse(x); },
reply: ajax.response
}
})();
network.invoke(valid_argument); // I invoke the function and pass a valid json string received from a server via ajax.
console.log(network.reply); // I get 0, which is the initial value. Why?
正如“守则”中提到的,这个问题很奇怪,任何帮助都表示赞赏。
答案 0 :(得分:1)
我得到0,这是初始值。为什么呢?
由于def printMassage(List , mylabel):
for dicts in List:
if dicts[Label] == mylabel:
print(dicts[Massage])
分配给reply: ajax.response
(副本),reply
在执行该行时有的值。对ajax.response
的未来更改不会影响ajax.response
,这两个属性之间没有内在联系。
以下是相同情况的简化示例:
reply
JavaScript是pass-by-value,而不是pass-by-reference。这意味着该值的副本将分配给var x = 42;
var y = x;
x = 21;
console.log(y); // still 42
,而不是对reply
属性的引用。
答案 1 :(得分:0)
@Felix King:我认为按值传递或通过引用传递与此无关。这些概念适用于传递给函数的参数,而不是赋值操作。