请解释为什么在以下示例中输出是"未定义的"?



为什么在下面的示例中,结果的值'不确定'?请解释某人如何计算?

<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);

最新更新