.bind()
JavaScript 関数を呼び出すと、スタック トレースはどうなりますか?
たとえば、私が持っているとき
Function.prototype.arg = function() {
var fn = this;
return function augmented(){
// do something with the arguments
fn.apply(c, args); // and call it
};
}
そしてそれを関数で使用します
(function x(){console.trace();}).arg()()
それはログに記録します
x
augmented
<global context>
bind() は (内部的に) 何をするのでしょうか? また、さまざまなシム (例: MDC の互換機能)でわかるように、部分適用と arg() のようなコンテキストの設定も行います。
私はecmascriptの仕様から、それが新しい関数を作成し、その内部プロパティを設定してコンテキストと引数を保存することを知っていますが、それでも元の関数へのポインタにすぎません(プロトタイプで確認できます)。まだ、
(function x(){console.trace();}).bind()()
ログのみを記録します
x
<global context>
内部に余分な呼び出しは本当にありませんか、それとも trace-method から隠されているだけですか?