1

当您调用.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() 做什么(内部)?它也像 arg() 那样做部分应用程序和设置上下文的事情,正如您在各种 shims 中看到的那样(例如MDC 的兼容性功能)。

我从 ecmascript 规范中知道它将创建一个新函数,并设置其内部属性以存储上下文和参数,但它仍然只是指向原始函数的指针(您可以通过原型看到它)。然而,

(function x(){console.trace();}).bind()()

只会记录

x
<global context>

里面真的没有额外的调用,还是只是隐藏在跟踪方法中?

4

0 回答 0