为什么如果我将对象传递给函数,则无需在javascript中声明函数参数

|| 下面是代码:
 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);

    data.sort(createComparisonFunction(\"age\"));
    alert(data[0].name);
如您所见,createCompatisonFunction用名为name的值填充,并且如您所见,在此函数内部,有object1和object2。请问这些论点传递了什么?你抓到我了吗?     
已邀请:
当在“ 1”中对元素进行排序时,排序算法将必须在两个元素之间执行基本比较,以确定哪个大于另一个。数组对象的“ 2”方法向比较函数提供要比较的两个对象。基本上,您正在为对象定义一个<运算符。     
Array.prototype.sort
接受这样定义的功能
function(left, right) {
    return new Number();
}
排序函数传递给数组的两个元素,并且您返回一个数字,说明它们应按照的顺序排列。 如果左侧元素需要在右侧之前,则只需返回
-1
,否则应返回
1
(如果应该在右侧之前)。 如果没关系,请传回
0
。 在您的情况下,
object1
object2
分别是
{name: \"Zachary\", age: 28}
{name: \"Nicholas\", age: 29}
。     
函数
createComparisonFunction
的代码是返回函数的函数。 从本质上讲,您的代码与以下扩展内容相同:
var data = [{name: \"Zachary\", age: 28}, {name: \"Nicholas\", age: 29}];

data.sort(function(object1, object2){
  var value1 = object1[\"name\"];
  var value2 = object2[\"name\"];
  if(value1 < value2){
    return -1;
  }else if(value1 > value2){
    return 1;
  }else{
    return 0;
  }
}); 

alert(data[0].name);

data.sort(function(object1, object2){
  var value1 = object1[\"age\"];
  var value2 = object2[\"age\"];
  if(value1 < value2){
    return -1;
  }else if(value1 > value2){
    return 1;
  }else{
    return 0;
  }
});
alert(data[0].name);
创建“ 14”的目的是将复制和粘贴的代码重构到一个区域中,以便于代码管理。还要注意,如果您的数据对象还包含一个名为““ lastname”“的属性,则此函数也可以用于按LastName排序。基本上,一个功能比复制和粘贴代码要健壮得多。     

要回复问题请先登录注册