我想知道为什么有这么奇怪的行为,因为variableOne应该是相同的。
myfun = (function() {
var variableOne = 10;
get = function(){
return variableOne;
}
set = function(value){
variableOne = value;
}
return {variableOne,set,get};
})();
// Console Window Output
console.log(myfun.variableOne);
>>10
myfun.variableOne = 90;
myfun.get()
>>10
为什么variableOne的值未更改为90。
最佳答案
发生这种情况是因为variableOne
是原始值-基本值是按值复制的,而不是按引用复制的,因此一旦return
中的赋值(通过使用“对象文字属性值的简写形式”创建属性,而不是破坏性分配),这些现在是两个单独的变量。附带说明一下-正如我所说,对象是按引用复制的,但是您仍然可以使用赋值运算符来更改引用本身(您可以在此处的另一个SO问题Is JavaScript a pass-by-reference or pass-by-value language?中了解有关此内容的更多信息)。
而且,get
方法访问返回的对象之外的variableOne
-在闭包中定义的对象(即使闭包已经执行,它仍然存在)。set
方法实际上不是属性设置器,因为创建setter
要求您传递属性名称。在这种情况下,这只是另一个常规对象方法。