大侠们帮忙看下这段程序: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: "zar", age: 26}, {name: "nich", age: 24}];data.sort(createComparisonFunction("name"));
alert(data[0].name);    //nich
不太明白createComparisonFunction函数里的内部函数object1和object2参数是怎么传进去的,请高手详细解答一下原理,不要只是这是规定的这么简单的解答,谢谢!

解决方案 »

  1.   

    试了下不能运行,这是javascript高级程序设计里第五章5.5.3的一个例子,看不明白那两个参数怎么传进去的
      

  2.   

    当你调这句的时候,createComparisonFunction("name")
    其实它返回给你的是一个function
    即 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;
            }
    而array的sort方法可以接收一个function参数,它正好可以有2个参数,就是obj1和obj2,这样就明白点了吧
      

  3.   

    function createComparisonFunction(propertyName) {
        ...
    }
    函数createComparisonFunction()只是为返回一个  比较函数compare函数
    于是函数可以写成
    return function compare(value1, value2){
    var v1 = value1[propertyName];
    var v2 = value2[propertyName];
    if(v1 < v2){
    return -1;
    }else if(v1 > v2){
    return 1;
    } else{
    return 0;
    }
    };
    compare比较函数有两个参数value1,value2,就相当于这里object1、object2.
    之所以使用了createComparisonFunction()函数,只是为了传一个函数参数propertyName。
    相信你应该明白了吧。