0
function comParison(propertyName){
    return function(obj1,obj2){
       var value1 = obj1[propertyName];
       var value2 = obj2[propertyName];

       if (value1 < value2){
        return -1;
       }else id (value1 > value2){
        return1;
       }else{
        return 0;
       }
    }
  };


var data = [{name:n1},{name:n2}];
data.sort(comParison("name"));

这将比较名称,但是 comParison 函数如何访问名称属性以及为什么它必须作为字符串传递?

4

1 回答 1

0

上面的例子是基于闭包的。一步一步大致是这样的:

  1. comParison函数接受propertyName作为参数
  2. 在内部创建的匿名函数comParison,该函数可以访问内部的propertyName所有其他内容comParison(以及全局变量)。
  3. 然后将此匿名函数作为排序函数返回
  4. 到调用此匿名函数时,由于闭包,它仍然可以访问propertyName变量,因此能够访问obj[propertyName]

希望这能说明一点。

另一个有用的答案。

于 2013-07-07T17:13:24.610 回答