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

why if i passed objects into a function, i need not to declare the function arguments in javascript

本文关键字:函数 不需要 javascript 参数 声明 如果 对象 为什么      更新时间:2023-09-26

代码如下:

 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。我能问一下这些参数都带了什么吗?你明白我的意思吗?

在排序data中的元素时,排序算法必须在两个元素之间执行基本比较,以确定哪个元素大于另一个元素。数组对象的sort方法,提供了它要比较的两个对象的比较函数。基本上你是在定义<</p>

Array.prototype.sort接受如下定义的函数

function(left, right) {
    return new Number();
}

给排序函数传递数组的两个元素,然后返回一个数字,说明它们的排列顺序。

如果左元素需要在右元素之前,则返回-1,否则返回1,如果右元素应该在左元素之前。

如果不重要则返回0

在您的例子中,object1object2分别是{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);

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

相关文章: