为什么如果我将对象传递到函数中,我不需要在javascript中声明函数参数

为什么如果我将对象传递到函数中,我不需要在javascript中声明函数参数,javascript,function,object,Javascript,Function,Object,代码如下: function createComparisonFunction(propertyName){ return function(object1, object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value1 < value2){

代码如下:

 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);
函数createComparisonFunction(propertyName){
返回函数(object1、object2){
var value1=object1[propertyName];
var value2=object2[propertyName];
如果(值1<值2){
返回-1;
}否则如果(值1>值2){
返回1;
}否则{
返回0;
}
};
}
var数据=[{姓名:“扎卡里”,年龄:28},{姓名:“尼古拉斯”,年龄:29}];
data.sort(createComparisonFunction(“name”);
警报(数据[0]。名称);
data.sort(createComparisonFunction(“age”);
警报(数据[0]。名称);

正如您所看到的,createCompatisonFunction由名为name的值填充,并且正如您在该函数中看到的,有object1和object2。我能问一下这些论点是如何传递的吗?明白了吗?

在对
数据中的元素进行排序时,排序算法必须在两个元素之间执行基本比较,以确定哪个元素大于另一个元素。数组对象的
排序
方法为要比较的两个对象提供比较函数。基本上,您是在为对象定义一个排序运算符。

数据中的元素进行排序时,排序算法必须在两个元素之间执行基本比较,以确定哪个元素大于另一个元素。数组对象的
排序
方法为要比较的两个对象提供比较函数。基本上,您是在为对象定义一个排序运算符。

Array.prototype.sort
接受这样定义的函数

function(left, right) {
    return new Number();
}
排序函数被传递给数组的两个元素,然后返回一个数字,说明它们应该按什么顺序排列

如果left元素需要在right之前,那么只需返回
-1
,否则如果right应该在left之前,则返回
1

如果不重要,则返回
0


在您的例子中,
object1
object2
分别是
{name:“Zachary”,age:28}
{name:“Nicholas”,age:29}

Array.prototype.sort
接受这样定义的函数

function(left, right) {
    return new Number();
}
排序函数被传递给数组的两个元素,然后返回一个数字,说明它们应该按什么顺序排列

如果left元素需要在right之前,那么只需返回
-1
,否则如果right应该在left之前,则返回
1

如果不重要,则返回
0


在您的例子中,
object1
object2
分别是
{name:“Zachary”,age:28}
{name:“Nicholas”,age:29}

函数
的代码是返回函数的函数

从本质上讲,您的代码与以下展开的代码没有什么不同:

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);
var data=[{name:“Zachary”,年龄:28},{name:“Nicholas”,年龄:29}];
data.sort(函数(object1、object2){
var value1=object1[“name”];
var value2=object2[“名称”];
如果(值1<值2){
返回-1;
}否则如果(值1>值2){
返回1;
}否则{
返回0;
}
}); 
警报(数据[0]。名称);
data.sort(函数(object1、object2){
var value1=object1[“年龄”];
var value2=object2[“年龄”];
如果(值1<值2){
返回-1;
}否则如果(值1>值2){
返回1;
}否则{
返回0;
}
});
警报(数据[0]。名称);

创建
createComparisonFunction(propertyName)
的目的是将复制和粘贴的代码重构到一个区域,以便更轻松地管理代码。另请注意,如果数据对象还包含名为“lastname”的属性,则此函数也可用于按lastname排序。基本上,一个函数比复制和粘贴代码要健壮得多。

函数的代码
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);
var data=[{name:“Zachary”,年龄:28},{name:“Nicholas”,年龄:29}];
data.sort(函数(object1、object2){
var value1=object1[“name”];
var value2=object2[“名称”];
如果(值1<值2){
返回-1;
}否则如果(值1>值2){
返回1;
}否则{
返回0;
}
}); 
警报(数据[0]。名称);
data.sort(函数(object1、object2){
var value1=object1[“年龄”];
var value2=object2[“年龄”];
如果(值1<值2){
返回-1;
}否则如果(值1>值2){
返回1;
}否则{
返回0;
}
});
警报(数据[0]。名称);
创建
createComparisonFunction(propertyName)
的目的是将复制和粘贴的代码重构到一个区域,以便更轻松地管理代码。另请注意,如果数据对象还包含名为“lastname”的属性,则此函数也可用于按lastname排序。基本上,one函数比复制和粘贴代码要健壮得多