为什么如果我将对象传递到函数中,我不需要在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函数比复制和粘贴代码要健壮得多