function createComparisonFunction(propertyName) {
        
            return function(object1, object2){
                var value1 = object1[propertyName];
                var value2 = object2[propertyName];
        
                if (value1 < value2){
                    return -1;
                } else if (value1 > value2){
                    return 1;
                } else {
                    return 0;
                }
            };
        }
 
        var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
        
        data.sort(createComparisonFunction("name"));
        alert(data[0].name);  //Nicholas
        
        data.sort(createComparisonFunction("age"));
        alert(data[0].name);  //Zachary        
看到书上的这段代码,没看懂,为什么只传了一个name进去,就能把数组里面的两个数据按顺序取出来。
javascript的参数传递在这里到底是怎么工作的,书上也没交代清楚

解决方案 »

  1.   

    data.sort(func)
    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:    * 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
        * 若 a 等于 b,则返回 0。
        * 若 a 大于 b,则返回一个大于 0 的值。
      

  2.   

    Array.sort在执行的时候可以提供一个 2个元素比较大小的函数
    当提供了 这个函数的时候 sort方法 在排序中比较2个元素大小的时候 就调用这个函数 这样的话 排序的依据逻辑就可以被外部定制了配合上面说的 你在仔细观察createComparisonFunction的返回值就明白了