解释javascript inane函数参数

时间:2014-04-17 13:40:28

标签: javascript angularjs function parameters arguments

我无法搂住这个。这是一个例子......有人请解释一下吗?

在AngularJs中,可以编写自定义过滤器。一个这样的过滤器看起来像这样(感谢Adam Freeman和他关于Angular的新书):

angular.module("exampleApp")
  .filter("labelCase", function() {
    return function (value, reverse) {
      if (angular.isString(value)) {
         ....
      }
    };
 });

在此示例中,内部函数中的“value”值由Angular自动提供。 “反向”参数由代码开发人员提供,必须由HTML插入。 “反向”的值由HTML提供如下:

... <tr>{{p.category | labelCase:true}}</td>

所以,这是我的问题:

  1. 我们怎么知道Angular会自动将值数据插入“value”参数?这是常识吗?

  2. 为什么HTML“labelCase:true”调用不必为函数中的“value”参数提供占位符?换句话说,Angular如何知道将“true”应用于第二个参数?

  3. 这怎么不会造成令人难以置信的脆弱代码?如果Angular人决定在未来提供另一个自动提供的论点,会发生什么?如果发生这种情况,这不会破坏当前编写的内部函数:return function(value,reverse){...}?

  4. 这对我来说非常困惑。我期待着更好地理解这一切。

2 个答案:

答案 0 :(得分:0)

  1. 关于创建客户过滤器的Angular文档说:

      

    这个工厂函数应该返回一个新的过滤函数,它将输入值作为第一个参数。

    这意味着Angular会将函数的输入值作为value参数提供,因为它是第一个参数。

  2. 文档继续说:

      

    任何过滤器参数都作为过滤函数的附加参数传入。

    因此,HTML不必处理为第一个参数留下位置,Angular负责以适当的顺序提供它们。

  3. 就像大多数Javascript函数一样,你必须知道正确调用它们的参数顺序。开发人员通常保证他们不会不兼容地更改订单。可以在参数列表的末尾添加其他参数;如果没有提供,函数必须适当地默认它们(JS自动将它们设置为undefined)。

答案 1 :(得分:0)

  1. 是的,这是常识。如果angularjs表达式(value
  2. ,则此input可以解释为{{p.category |...从右侧开始
  3. 如第一个问题所述,value是过滤器的输入。由:分隔的每个附加值都将作为参数添加到过滤器回调中。
  4. 在使用库进行开发时,这是您经常遇到的问题。 API和接口确实发生了变化。我想他们将来不会改变一些东西,但你永远不会知道。这就是有时需要迁移的原因。
  5. {{p.category | customFilter:secondParam:thirdParam: .... }}

    angular.module("exampleApp")
      .filter("labelCase", function() {
        return function (input, someSecondParam, someThirdParam) {
          if (angular.isString(input)) {
             ....
          }
        };
     });