6

私はjavascriptを学んでいます。関数が定義された後、関数を他の関数に渡すことができることを私は知っています。しかし、私はこの例を理解するのに助けが必要です:

function map(func, array) {
  var result = [];
  forEach(array, function (element) {
    result.push(func(element));
  });
  return result;
}

私が理解できることから、funcはマップの引数です。関数としての機能を提供する必要があります。しかし、私が読んでいるチュートリアルでは、この関数がどこから来たのかについては言及されていません。この引数を指定する必要はないようですか?チュートリアルの別の例も同じです。

 function count(test, array) {
  return reduce(function(total, element) {
    return total + (test(element) ? 1 : 0);
  }, 0, array);
}

このテスト関数は要素===0に等しいですか?1:0ですが、チュートリアルでは、テスト関数を書き留める必要があるとは書かれていません。このテスト関数を作成する必要がありますか?

4

2 に答える 2

4

編集:投稿したチュートリアルへのリンクでは、渡された関数は事前定義された関数Math.roundです。以下の私の例は、渡す独自の関数を作成することを示しています。


map例は実装を示しています。を呼び出すときに、関数 (および配列) を提供しますmap

見た目から、map配列内の現在のアイテムを関数に渡すと、関数はそれを使用して何かを実行し、結果を返す必要があります。関数が返す結果は、新しい配列に追加されます。

var arr = [1,2,3,4,5];
var my_func = function(item) { return item * 2; };

var new_arr = map(my_func, arr);

console.log(new_arr); // [2,4,6,8,10]
  1. Array ( arr)を作成しました。

  2. 関数( my_func)を作成しました。この関数は、与えられたものを何でも取り、それを 2 倍します。

  3. 両方を渡しましたmap

  4. map関数は を反復しarr、各反復で現在のアイテムを関数に渡します。

  5. この関数は現在のアイテムを受け取り、それを 2 倍した結果を返します。

  6. 関数はその結果を受け取り、mapそれを新しい配列に追加します。

  7. 反復が完了すると、map関数は新しい配列を返します。

于 2012-06-16T02:07:56.233 に答える
0

map を呼び出すときは、インライン関数または既存の関数を渡します。

// The following would return [2,3,4]
map(function(item) { return item + 1}, [1,2,3]);

function double(item) {return item*2}
map(double, [1,2,3])
// returns [2,4,6]

// Your example, Math.round
map(Math.round, [0.01, 2, 9.89, Math.PI])
// returns [0,2,10,3]

別の言い方をすれば、関数は他の引数と同じように別の関数に渡すことができます。これは、関数が他の変数を渡したり、関数から返したりできるのと同じ行にあります。

function createAdder(toAdd) {
    return function (num) {
        return num + toAdd;
    }
}

var add5 = createAdder(5);
add5(2); // returns 7


var add7 = createAdder(7);
add7(-2); // returns 5
于 2012-06-16T02:14:22.810 に答える