Javascript 将作用域作为参数传递到要保存的函数中

Javascript 将作用域作为参数传递到要保存的函数中,javascript,angularjs,function,parameters,Javascript,Angularjs,Function,Parameters,我的控制器有两个功能,如下所示 $scope.formatPaymentDates = function() { $scope.formatDate($scope.payment.due_date); $scope.formatDate($scope.payment.date); }; $scope.formatDate = function(attr) { if (attr) { var split_date = attr.split("-"); if (s

我的控制器有两个功能,如下所示

$scope.formatPaymentDates = function() {
  $scope.formatDate($scope.payment.due_date);

  $scope.formatDate($scope.payment.date);
};


$scope.formatDate = function(attr) {
  if (attr) {
    var split_date = attr.split("-");

    if (split_date[0].length == 4) {
      attr = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
    }  else {
      attr = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
    }
  }
};

问题是函数formatDate只设置scope变量属性,而不保存它。我缺少什么?

在JavaScript中,字符串和数字通过值传递,而对象通过引用传递。您应该传递一个对象作为参数

或者,如@faby所述,返回值:

$scope.formatPaymentDates = function() {
  $scope.payment.due_date = $scope.formatDate($scope.payment.due_date);
  $scope.payment.date = $scope.formatDate($scope.payment.date);
};


$scope.formatDate = function(attr) {
  var result;
  if (attr) {
    var split_date = attr.split("-");

    if (split_date[0].length == 4) {
      result = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
    }  else {
      result = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
    }
  }
  return result;
};

问题是您没有从formatDate函数返回任何结果。 您正在操作函数内的变量,然后销毁它

试试这个

    $scope.formatDate = function(attr) {
      if (attr) {
        var split_date = attr.split("-");

        if (split_date[0].length == 4) {
          attr = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
        }  else {
          attr = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
        }
    return attr;
      }
return null
    };
然后

$scope.formatPaymentDates = function() {
  $scope.payment.due_date= $scope.formatDate($scope.payment.due_date);

  $scope.payment.date=$scope.formatDate($scope.payment.date);
};

如果
attr
参数是一个对象,那么它将起作用,因为所有对象都是通过JS中的引用传递的。但它似乎是一个字符串,它是通过值传递的。我从来没有想过这一点。谢谢。@MatthiasDailey我知道理论上你说的是真的。事实恰恰相反。我请您试一试,您将始终看到对象变量的行为就像是按值传递一样。@faby,也许您指的是传递对象的参数,这些参数的计算结果是数字和字符串。但我向您保证,在JavaScript中,对象总是通过引用传递的。