-1
        var oldView = currentView;
        currentView = new View();
        console.log(oldView) //oldView should point to the old one, not the new one.
4

1 回答 1

3

扩展我的评论:

我假设您正在考虑 C++“参考”变量。JavaScript 没有这些,也没有指针。

C++ 的语义是围绕固定内存位置的概念构建的:int foo;保证您的程序在某处有四个字节。 foo将始终引用相同的四个字节。如果您随后创建对with的引用,也将始终引用这四个字节。分配给一个变量的任何值都将是您从另一个变量获得的值。fooint &bar = foo;bar

JavaScript 和许多其他动态语言一样,不是这样工作的。变量名称更像是在对象之间移动的标签,对象所在位置的精确细节与您无关。所以,一步一步,你的代码会这样做:

var oldView = currentView;

创建一个名称,oldView并将其粘贴到所粘贴的同一对象currentView上。就像一个便利贴。

currentView = new View();

创建一个新View对象,并在其上粘贴名称currentView。这对;没有影响 oldView那是一个完全不同的名字,仍然粘在同一个物体上。

console.log(oldView);

因为你从未改变过oldView,所以它仍然附着在同一个对象上。

于 2013-03-03T06:32:16.397 回答