为什么在下面的示例中,结果的值'不确定'?请解释某人如何计算?
<script>
var foo = {
bar: function() { return this.baz; },
baz: 1
};
var a = (function(){
return typeof arguments[0]();
})(foo.bar);
console.log(a);
</script>
注意:我已经通过以下链接了,它没有解释 例子。这里没有构造函数函数... 如何在回调内访问正确的``this```
arguments[0]()
在窗口上下文中执行,但是它没有名称 bar 中定义的任何对象属性(这是 foo foo )。这就是为什么您获得undefined
的原因。要解决问题,您可以绑定对象。
更改
foo.bar
to
foo.bar.bind(foo)
var foo = {
bar: function() { return this.baz; },
baz: 1
};
var a = (function(){
console.log(this.constructor.name); // Window
return typeof arguments[0]();
})(foo.bar.bind(foo));
console.log(a);