• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScriptの関数に渡される引数について)

JavaScript関数の引数について

このQ&Aのポイント
  • JavaScriptの関数に渡される引数について分かりません。
  • 特に、445行目のEnumerable.each、521行目のincludeメソッドの引数の挙動が分かりません。
  • この場合、valueとobjectの引数には何が入るのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.2

Prototype JavaScript framework, version 1.5.1 line:669 Array.prototype._each = function (iterator) {  for (var i = 0, length = this.length; i < length; i++)   iterator(this[i]); }; var arr = [0, 1, 2, 3]; arr._each(function (value) { alert(value); }); _eachメソッドです。 配列(this)要素を順に受け取った関数オブジェクト(iterator)に渡し実行します。 実際のコードとは違いますがEnumerableオブジェクトの各プロパティは後に Array.prototype他の拡張に使われています。 thisをarrに置き換えれば、valueに何が入るのか分かると思います。 これを踏まえて、下記コードを追ってみて下さい。 Array.prototype.each = function (iterator) {  for (var i = 0, length = this.length; i < length; i++) {   if (iterator(this[i]) === false) break;  } }; Array.prototype.include = function (obj) {  var found = false;  this.each(function (value) {   if (value == obj) {    found = true;    return false;   }  });  return found; }; var arr = [0, 1, 2, 3]; arr.include(1); // true

chopperin
質問者

お礼

ありがとうございました。 Array.prototype._eachを見落としていました。 で、他にもgsub()もようやく理解が出来ました。 本当にありがとうございました。

その他の回答 (1)

noname#212058
noname#212058
回答No.1

無名関数と 『関数オブジェクトの参照』 を引数に渡す話ですね。 これはどれが、どこで実行されるかを丁寧にほぐさないと、すぐに 迷子になります。 521行目の include このコードは、ほぐすと以下のようなコードになります。 function include(object) {  var found = false;  this.each( 無名関数 );  return found; } function 無名関数(value) {  if (value == object) {   found = true;   echo(value);   throw $break;  } } 注) 無名関数 を include メソッドの外に出してしまうと、object は   undifined になってしまいます。わかりやすさを優先してこう書き   ましたが、このコードは元のコードとそういう意味で一致して   いません。 this.each メソッドに 「無名関数」 というメソッドそのものを入れて いるのがわかりますね。このとき、this.each メソッドは例えば 以下のように記述されます。 each: function( 引数関数 ) {  // ← メソッドを引数で受け取る  引数関数( "あああ" );     // ← 引数をメソッドとして実行する } 整理しましょう。 1. include( a ) を実行する 2. include メソッド内で、this.each メソッドを 「無名関数」 を引数   として実行する 3. this.each メソッド内で、引数 「引数関数」 を "あああ" を引数   として実行する   # this.each の引数は 「無名関数」 メソッドなので、「無名関数」   # が "あああ" を引数として実行される 4. 無名関数メソッド内の if (value==object) が実行される。   ここまでくれば、value="あああ"、object=a なのはわかりますね。 もうひとつのコードのほうもこれと仕組みは同じです。 関数ポインタは慣れると非常に強力な仕組みなのですが、 コードが読みにくくなるのが難点です。

chopperin
質問者

お礼

ありがとうございました。 ようやく理解が出来ました。 やはりご指摘のとおり、ほぐして考えないと分かりにくかったです。 本当にありがとうございました。