我想知道为什么有这么奇怪的行为,因为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要求您传递属性名称。在这种情况下,这只是另一个常规对象方法。

10-06 03:58