在Chrome中,JS绑定函数具有null arguments.callee.caller

时间:2012-02-21 02:07:39

标签: javascript google-chrome arguments v8 ecmascript-5

从Chrome 17开始,对于绑定函数,arguments.callee.caller似乎为null:

function a() {
  this.test = function() { console.debug('*** ' + arguments.callee.caller); };
  this.test();  // This prints the function
  this.bound = this.test.bind(this);
  this.bound(); // This prints null
}

用于一致行动的绑定和非绑定函数,但不再是。

这是预期的行为吗?

2 个答案:

答案 0 :(得分:1)

也许这不是错误。你可能会注意到这一点:
If the function f was invoked by the top level code, the value of f.caller is null, otherwise it's the function that called f. MDN

当你在函数a中使用它时,'this'表示DOMWindow。因此,当您将绑定函数绑定到this时,顶级代码会调用绑定函数。它返回null

愿它有所帮助。 rdtriny。

答案 1 :(得分:1)

arguments.callee和公司已被弃用。他们在严格模式下抛出错误。我的猜测是,他们正在逐步淘汰更新版本的Chrome。但我无法证实,因为我还在16岁。