Javascript 我怎么能这样理解;var vm=$scope.vm={}";在AngularJS?

Javascript 我怎么能这样理解;var vm=$scope.vm={}";在AngularJS?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,当我阅读angularJS api时,我发现代码如下: myApp.controller('MyController', ['$scope', function($scope) { var vm = $scope.vm = {name:'savo'}; } ]); myApp.controller('MyController', ['$scope', function($scope) { var vm = $scope.vm = {name:'savo'}

当我阅读angularJS api时,我发现代码如下:

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;
    }
]);
<div ng-controller="MyController">
    <pre>{{vm}}</pre>
    <pre>{{vm.name}}</pre>
    <pre>{{vm.age}}</pre>
</div>
这种多重作业似乎很容易理解。 但当我这样编码时:

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;
    }
]);
<div ng-controller="MyController">
    <pre>{{vm}}</pre>
    <pre>{{vm.name}}</pre>
    <pre>{{vm.age}}</pre>
</div>
HTML是这样的:

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;
    }
]);
<div ng-controller="MyController">
    <pre>{{vm}}</pre>
    <pre>{{vm.name}}</pre>
    <pre>{{vm.age}}</pre>
</div>

{{vm}}
{{vm.name}
{{vm.age}
浏览器中的结果如下所示:

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

当我使用本机JavaScript时,这不会发生。 我还可以将两个
vm
更改为不同的名称,它不会改变任何东西

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

顺便问一下,为什么要使用名称
vm
vm
是指一些单词的缩写

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

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

当我使用本机JavaScript时,这不会发生


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

关于最后一个问题,VM代表视图模型。非常感谢^_^谢谢!我对本地JavaScript有点困惑,现在我明白了!O(∩_∩)O