假设你写了一个像这样的javascript对象service
:
window.service = (function() {
var list = [ 'A', 'B', 'C' ];
return {
list: list,
setList: setList,
getList: getList
}
function setList( l ) {
list = l;
}
function getList() {
return list;
}
}());
有两种方法可以获得list
的值,并且两者都运行良好。
// output: ["A", "B", "C"]
console.log( service.list );
// output: ["A", "B", "C"]
console.log( service.getList() );
但是,当我尝试更新list
值并再次访问其值时,这样:
service.setList( [ 1, 2, 3 ] );
// output: ["A", "B", "C"]
console.log( service.list );
// output: [1, 2, 3]
console.log( service.getList() );
发生了一些奇怪的问题,我发现service.list
在将新值设置为["A", "B", "C"]
后仍会打印值list
。
我很困惑,并且不知道为什么会发生这种情况,chrome browser
缓存了list
的值,这是不正确的评估财产的方法吗?为什么?任何解释我在做什么(思考)错了?
与 java
比较,代码如下:
public class Service {
public CustomObject obj = new CustomObject("Name A");
public static void main(String[] args) {
Service service = new Service();
// output: name:Name A
System.out.println(service.obj);
CustomObject updateObj = new CustomObject("Name B");
// update it
service.obj = updateObj;
// output: name: Name B
System.out.println(updateObj);
}
}
public class CustomObject {
private String name;
public CustomObject(String name) {
this.name = name;
}
public String toString() {
System.out.println("name:" + name);
}
}
在java
中,当您为reference
分配新值时,它会正确更新,reference
会自动指向新值。我从java
获得的这种体验不适合javascript
吗?