AngularJS 中的 "var vm = $scope.vm = {}" 怎么理解?

How can I understand like this "var vm = $scope.vm = {}" in AngularJS?

当我阅读angularJSapi时,我发现代码是这样的:

myApp.controller('MyController', ['$scope', function($scope) {
        var vm = $scope.vm = {name:'savo'};
    }
]);

这个多重赋值看起来很容易理解。 但是当我这样编码时:

myApp.controller('MyController', ['$scope', function($scope) {
       var vm = $scope.vm = {name:'savo'};
       vm.age = 18;
    }
]);

而 HTML 是这样的:

<div ng-controller="MyController">
    <pre>{{vm}}</pre>
    <pre>{{vm.name}}</pre>
    <pre>{{vm.age}}</pre>
</div>

此处浏览器中的结果:

这是我的问题: 控制器给vm一个属性age,为什么$scope中的vm也有?

当我使用本机 JavaScript 时,不会发生这种情况。 我也可以把两个vm改成不同的名字,不会有任何改变。

我是 angularJS 的新手,这让我很困惑,谢谢你的帮助!

对了,angular为什么用vm这个名字,vm是不是指某些单词的缩写?

Here is my question: The controller give the vm a attribute age, why the vm in the $scope has it too?

因为变量vm$scope.vm指向同一个对象。由于两者是同一个对象,当您更改一个添加新的 属性 时,秒数也会改变。

When I use native JavaScript, this can not happen.

你在这里有点困惑。这是典型的行为,因为 javascript 中的所有非基本类型(对象、函数、数组等)都是通过引用传递的。