在 Chrome 中,JS 绑定函数具有空参数。callee.caller
从 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
}
绑定函数和未绑定函数过去的行为一致,但现在不再了。
这是预期的行为吗?
From Chrome 17 on, arguments.callee.caller seems to be null for bound functions:
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
}
The bound and unbound functions used to act consistently, but not anymore.
Is this expected behavior?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许这不是一个错误。您可能会注意到这一点:
如果函数 f 是由顶层代码调用的,则 f.caller 的值为 null,否则是调用 f 的函数。
MDN当你在函数 a 中使用 this 时,
'this'
表示DOMWindow.因此,当您将绑定函数绑定到
this
时,绑定函数将由顶层代码调用。它返回null
。愿它有帮助。 rdtriny。
Maybe it's not an error. You may note this:
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.
MDNAnd when you use this in function a,
'this'
meansDOMWindow
. so When you bind bound function tothis
, bound function was invoked by the top level code. It returnsnull
.May it helps. rdtriny.
arguments.callee
和 company 已弃用。他们在严格模式下抛出错误。我的猜测是它们将在新版本的 Chrome 中被淘汰。但我无法确认,因为我还不到 16 岁。arguments.callee
and company are deprecated. They throw errors in strict mode. My guess is that they are being phased out in newer versions of Chrome. I can't confirm, though, because I'm still on 16.