如果将$ scope.variable1作为参数传递给函数,如何修改它?

时间:2014-02-26 12:41:33

标签: javascript angularjs

我有以下函数调用:

var qid = 6;
var $scope.qidLower = null;
var $scope.qidUpper = null;
_o.parseRange(qid, $scope.qidLower, $scope.qidUpper);
// Checking after here the values of $scope.qidLower and $scope.qidUpper are null !

这传递给我的函数:

  var _parseRange = function (text, lower, upper) {
       if (!text || text === "") {
           lower = null;
           upper = null;
       }
       else if (text.indexOf("-") > 0) {
           arr = text.split("-");
           lower = +arr[0];
           upper = +arr[1];
       }
       else {
           lower = +text;
           upper = null;
       }
   }

当我检查低位和高位的值时,该函数将它们设置为6并且为空

当我现在$ scope.qidLower,$ scope.qidUpper在函数调用之后的行上它们都是null。

有人可以解释为什么会这样。我想如果函数修改了一个参数值 在函数返回后它将可用。

2 个答案:

答案 0 :(得分:0)

$scope.qidLower$scope.qidUpper作为参数传递给函数时。引用复制到参数。

当您在函数内为这些参数指定值(新参考)时,参数的引用会发生变化,但$scope.qidLower和{{1 }

<强>解决方案:

$scope.qidUpper

更改您的代码:

var _parseRange = function (text, lower, upper) {
       if (!text || text === "") {
           lower = null;
           upper = null;
       }
       else if (text.indexOf("-") > 0) {
           arr = text.split("-");
           lower = +arr[0];
           upper = +arr[1];
       }
       else {
           lower = +text;
           upper = null;
       }
       return {lower:lower,upper:upper}; //return at the end of the function
   }

注意:

如果您为var qid = 6; var $scope.qidLower = null; var $scope.qidUpper = null; var calculatedBounds = _o.parseRange(qid, $scope.qidLower, $scope.qidUpper); $scope.qidLower = calculatedBounds.lower; $scope.qidUpper = calculatedBounds.upper; $scope.qidLower以及函数内部分配了非空对象,则更新参数的属性,而不是分配新对象,您的$scope.qidUpper$scope.qidLower会注意到更改。

$scope.qidUpper

调用该函数:

var _parseRange = function (text, bounds) {
           if (!text || text === "") {
               bounds.lower = null;
               bounds.upper = null;
           }
           else if (text.indexOf("-") > 0) {
               arr = text.split("-");
               bounds.lower = +arr[0];
               bounds.upper = +arr[1];
           }
           else {
               bounds.lower = +text;
               bounds.upper = null;
           }
       }

答案 1 :(得分:0)

试试这种方式

var qid = 6;
$scope.qidLower = $scope.qidLower;
$scope.qidUpper = $scope.qidLower;
_o.parseRange(qid, $scope.qidLower, $scope.qidUpper)

var _parseRange = function (text, lower, upper) {
       if (!text || text === "" || text === undefined) {
           lower = null;
           upper = null;
       }
       else if (text.indexOf("-") > 0) {
           arr = text.split("-");
           lower = +arr[0];
           upper = +arr[1];
       }
       else {
           lower = +text;
           upper = null;
       }
        $scope.qidLower = lower ;
        $scope.qidUpper = upper ;
   }

现在,您可以从

获取任何时间和地点的值

$scope.qidLower$scope.qidUpper