我昨天问过一个类似的question但是有区别。
我尝试创建一个通用 function
,它将更改scope
object
(非原始)
但似乎没有工作,我不明白为什么?
我的代码:
webApp.controller ('VotesCtrl', function ($scope) {
$scope.param = {name: 'Ron', age: 18};
change($scope.param);
function change(contextParam) {
contextParam = {name:'dan', age: 12};
}
});
似乎change
function
对$scope.param
没有任何更改,即使我是{m}
通过reference
。
当我按照以下代码进行更改时,它正在运行!
webApp.controller ('VotesCtrl', function ($scope) {
$scope.param = {name: 'Ron', age: 18};
change($scope.param);
function change(contextParam) {
contextParam.name = 'dan';
contextParam.age = 12;
}
});
我做错了什么?你怎么解释这种行为?
答案 0 :(得分:0)
contectParam
是对象的引用。当您使用赋值运算符=
时,您更改contextParam
变量的值 - 它将停止作为对象的引用并获取完全不同的值。
但是,当您访问contextParam
引用的对象的属性时,您可以更改其值,从而使您的更改在函数范围之外可见。
作为旁注,如果你这样做会更好:
function change() {
return {name: 'dan', age: 12};
}
$scope.param = change();