0
function comParison(propertyName){
    return function(obj1,obj2){
       var value1 = obj1[propertyName];
       var value2 = obj2[propertyName];

       if (value1 < value2){
        return -1;
       }else id (value1 > value2){
        return1;
       }else{
        return 0;
       }
    }
  };


var data = [{name:n1},{name:n2}];
data.sort(comParison("name"));

これは名前を比較しますが、comParison 関数はどのように名前プロパティにアクセスし、なぜ文字列として渡す必要があるのでしょうか?

4

1 に答える 1

0

上記の例はクロージャーに基づいています。ざっくりですが、大体こんな感じです。

  1. comParisonpropertyName関数は引数として受け入れます
  2. 内部で作成された無名関数。その関数は、および内部の他のすべて(およびグローバル変数)comParisonにアクセスできます。propertyNamecomParison
  3. この無名関数は、ソート関数として返されます
  4. この無名関数が呼び出されるまでには、クロージャのためにまだpropertyName変数にアクセスできるため、アクセスできます。obj[propertyName]

これで少し明確になることを願っています。

別の有用な答え。

于 2013-07-07T17:13:24.610 に答える