私はスペンサーティッピングの優れたJavascript in Ten Minutesを再読み込みしてきた私の人生は、構文のマクロを作成するために怠惰なスコープを使用して、この例で何が起こっているのかを把握することはできませんのために:10分でJavascript:遅延スコープを示すこのコード例では何が起こっていますか?
特にvar f = function() {return $0 + $1};
var g = eval (f.toString().replace (/\$(\d+)/g,
function (_, digits) {return 'arguments[' + digits + ']'}));
g(5,6); // => 11 (except on IE)
を、
- $ 0、$ 1は関数定義によって置き換えられている - どのようその関数が評価されますでしょうか? (おそらくeval()によって、私はこれを見ていない)。
- 関数内の単一のアンダースコア引数の目的は何ですか?私がそれを取り出すと、コードは機能しなくなります。おそらくそれは単に場所の所有者ですが、なぜそれが必要ですか?
説明をありがとう(以下も)。これは、RTFMの場合です。replace()が2番目の引数として関数を取ることができなかった(または忘れていた)からです。これは実際に私の混乱でした。正規表現のマッチのためのコールバックである関数に関するあなたのコメントは、私に通知したものです。そこで、Rhinoの本の中のString.replace()のドキュメントを取り上げました。 stackOverflowに投稿する前にこれがなぜ起こっていなかったのかはっきりしませんが、もう一度感謝します。 – pgoetz