0

私はこれをもう少し明確に理解しようとしています。Array プロトタイプ内の each 関数を拡張して変更する場合、func(this[i]) を呼び出すと、Array.each に渡された関数がどのように呼び出されますか。

関数定義は function(func) であり、 func がパラメーターであるためです。

func =function(i) { alert(i) }したがってfunc(this[i]) = { function(this[i]) { alert(this[i]) }?

Array.prototype.each = function(func) {
  for (var i=0; i<this.length; i++) {
    func(this[i]);
  }
};

[1,2,3].each(function(i) {
  alert(i);
});
4

4 に答える 4

1

Please note that each function in JS is just an object. So func parameter passed to the each function is an object which is a function.

So calling func(aParam) you get the func parameter (which actually is a function) and call it passing the corresponding argument.

于 2013-01-16T16:05:22.537 に答える
1

はい、function(func) は基本的にパラメータ 'func' を持つ無名関数です

于 2013-01-16T16:02:42.500 に答える
0

オブジェクトの内部thisでは、インスタンス化されたプロトタイプのコンテキストを想定します (JS では、すべての型は基本的に何らかのプロトタイプのオブジェクト インスタンスであるため、すべての型は新しいオブジェクトを作成するための独自のプロトタイプを持っています)。したがって、この場合、はプロトタイプthisから作成されたオブジェクトArray(つまり[1,2,3]) を参照します。

メソッドごとに無名関数を渡すと、そのメソッドは、渡したi関数 (コールバック) の位置にある要素を渡すことができます。

私は説明する:

iter #1: this => [1,2,3] ; i => 0 ; func => (function(i){ alert(i); })(this[i]) => 1
iter #2: this => [1,2,3] ; i => 1 ; func => (function(i){ alert(i); })(this[i]) => 2
iter #3: this => [1,2,3] ; i => 2 ; func => (function(i){ alert(i); })(this[i]) => 3

と読めthis[i]ます[1,2,3][i]

于 2013-01-16T16:15:58.867 に答える
0

あなたの例では: func = function(i) { alert(i); }

于 2013-01-16T16:06:34.520 に答える