2016-12-22 6 views
0

私は有名な「JavaScript:The Good Parts」(Douglas Crockford著)と関わっています。もちろん素晴らしい本です。私はまだそれの準備ができていないかもしれないが、私はそれを与えることを考えた。私は次の例を理解するためにいくつかの助けが必要です。 replace()の2番目の引数は2つの引数abをとります。しかし、それらはどこに定義されていますか?彼らはどのように価値を取りますか?前もって感謝します。私は別のstackを参照しましたが、私はそれが本当に助けたとは思わない。モジュール - JavaScript:良品。このコールバックはどのように引数を取得していますか?

String.method('deentityify', function () { 

// The entity table. It maps entity names to 
// characters. 

var entity = { 
quot: '"', 
lt: '<', 
gt: '>' 
}; 

// Return the deentityify method. 

return function () { 

// This is the deentityify method. It calls the string 
// replace method, looking for substrings that start 
// with '&' and end with ';'. If the characters in 
// between are in the entity table, then replace the 
// entity with the character from the table. 

return this.replace(/&([^&;]+);/g, 
function (a, b) { 
var r = entity[b]; 
return typeof r === 'string' ? r : a; 
    } 
    ); 
    }; 
}()); 
+1

インデントゴア.. –

+1

あなたは関数がどのように動作するか分からない場合は、良いアイデアは、ドキュメントでそれを見ることです。 JavaScriptの場合、最も良いのはMDNです:[パラメータとして関数を置き換える](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter) –

+0

これは、既存のStringメソッドである 'String.replace'で呼び出されます。 – RemcoGerlich

答えて

1

他の関数を引数として受け入れる関数を記述できます。そのような機能はHigher-order functionsと呼ばれます。この例では、abは、関数のパラメータの名前に過ぎません。そのパラメータに正確に割り当てられるのは、replaceの実装までです。このアイデアの

良い図は、マッチ基準を決定する機能を受け付けるfindこの符号関数で

var items = [{name:"item1",price:100}, {name:"item2",price:200}]; 
 

 
// lets find an object in the array, that has name "item2" 
 
var result = items.find(function(a){return a.name==="item2"}); 
 
console.log(result);

あろう。関数コードfindは配列を繰り返し、配列が終了するか最初に一致するものが見つかるまで各要素にmatch-criteria関数を適用します。あなたのようなパラメータの機能を変更することができ、より良い理解のために:

result = items.find(function(whatever){return whatever.price>=100}); 
result = items.find(function(whatever){return whatever.price>100}); 
+0

ありがとうございました...非常によく説明されています。 – rookie

関連する問題