私は Spencer Tipping の優れたJavascript in Ten Minutesを読み直しましたが、レイジースコープを使用して構文マクロを作成するこの例で何が起こっているのか、一生理解できません。
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() によるものですが、私はこれを見ていません)。
- 関数内の単一のアンダースコア引数の目的は何ですか? それを取り除くと、コードは機能しなくなります。おそらくそれは単なるプレースホルダーですが、なぜそれが必要なのですか?