1)どのようにパラメータ1(インデックス)の整数であることを知っているん教えてください?
jQueryは整数を渡します。
2)関数はインデックスをインクリメントする方法をどのように知っていますか?
コールバックは、index
をインクリメントしません.jQueryメソッドはこれを行いません。
3)第2パラメータ(oldValue)は、プロパティの古い値(変更前)を保持する方法をどのように知っていますか?
jQueryが渡します。
質問1-3の回答は、おそらく最高の$.attr
に似た何かを実行する関数が理解されています
Array.prototype.each = function (f) {
var i;
for (i=0; i < this.length; ++i) {
f(i, this[i]);
}
};
['zero', 'one', 'two'].each(function (i,item) {console.log({i: item})});
f
がコールバックです。 each
は、コレクションの反復処理を担当し、各インデックス&アイテムに対してf
を呼び出します。同じコード構造が機能のために使用することができる。mapconcat
の
/* Map each item in a sequence to something else,
* returning a new sequence of the new values.
*/
Array.prototype.map = function (f) {
var i, result = [];
for (i=0; i < this.length; ++i) {
result[i] = f(i, this[i]);
}
return result;
};
['zero', 'one', 'two'].map(function(i,item) {return item.length});
// result: [4, 3, 3]
/* Return a sequence of the items from this sequence
* for which 'keep' returns true.
*/
Array.prototype.filter = function (keep) {
var i, result = [];
for (i=0; i < this.length; ++i) {
if (keep(i, this[i])) {
result.push(this[i]);
}
}
return result;
};
['zero', 'one', 'two'].filter(function(i,item) {return item.length <= 3});
// result: ['one', 'two']
実装foldl
and foldr
運動として残し。もう1つの練習として、each
でmap
とfilter
を書き換えてください。
これらの関数は、コールバックの仕組みを示すためのものです。プロダクションコードに問題が生じることがあります。
4)これはjQuery構造ですか? JSONのこと?かっこいいね。それは動作しますが、...これは "価値コールバック"のものは何ですか?
Callbacksは、jQueryが広範に使用する一般的な技術です。それらはfunctional programmingの重要な機能です。機能は他のデータタイプと同様に操作できるデータです。したがって、関数を引数として取り、関数を返す関数があります。特定の状況では、callbacksは「継続」としても知られており、continuation passing style(CPS)の基礎を形成しています。これは、asynchronous function calls [2](計算が完了する前に、synchronous callsではなく関数が返る場所)(Ajax要求などに使用される)の場合に特に重要です。 CPSの力の一部を見るには、"Use continuations to develop complex Web applications"と読んでください。
"value callback"の "value"は、JSが動的型付き言語(型は変数ではなくデータに関連付けられている)であるため、仮パラメータをいかなるタイプ。関数は、何が渡されるかによって異なる動作をすることができます。場合によっては、これは実際にはad-hoc polymorphism(言語ではなく関数がディスパッチを処理しなければならない)の引数の型を調べることによって実装されます。しかし、parametric polymorphismまたは(失敗した)duck typingは、引数型の検査よりも常に優先されるべきです。パラメトリック多態性は、特定の関数に渡すことができるすべての型が同じインタフェース(メソッド名、引数、前提条件、事後条件&など)をサポートすることによって実現されます。たとえば、すべてのシーケンスタイプはlength
プロパティを持ち、整数でインデックスを付ける必要があります。それが保持している限り、配列を取る多くの関数で独自の配列型を使用することができます。
JSONの意味がわかりませんが、一般的には意味がありません。 JSONは、JSオブジェクトのリテラル構文の限定されたバージョンに基づくデータ交換形式です。 JSONは、サンプルコードや引用されたテキストのどこにも含まれていません。
大きな故障。ありがとう! – sleeper
さらに詳しい故障!わかった。だから、このパターンはカリングの例ではありませんか? – sleeper
カレーに関するこの議論はまだまだ新しい2私です、それは私の頭の上です。しかし、あなたの内訳は完全に答えて、私の質問で提起された問題を説明します。だから私は自分の答えをあなたのものに切り替えました。あなたがこの答えに入れたすべての仕事に感謝します! – sleeper