首页 > 解决方案 > 当 IIFE 中缺少 obj 引用时,“this”应该返回“window obj”时的奇怪行为

问题描述

据我所知'this'关键字:

  1. 默认情况下,它指的是“Window Obj”
  2. 如果它写在一个函数内部(作为一个对象的道具),那么它指的是父 Obj

在下面的例子中,当调用 foo.bar 函数时(没有调用、应用、绑定的帮助),那么由于 obj (foo) 的引用丢失了,所以默认情况下新的引用必须是 window Obj。

奇怪的是,这个关键字仍然返回一个对象(它总是这样做),但属于第三种——参数对象。

另请注意,在执行 console.log 时调用 arguments[0] (), 'this' 仅返回我们心爱的 'window obj' 的 1 行!

现在,这个新对象到底是从哪里来的,它的重要性是什么?

根据我的理解(因为在 IIFE 中丢失了“foo”的引用,所以应该是“全局窗口 obj”)。请解释一下。

<script>
var foo = {
  bar: function() { 
    return this;
  }
};

var a = (function(){
  console.log(this);//returns window obj
  return arguments[0]();//here also should return window obj, as this here points to 'window obj'
})(foo.bar);

console.log("value of a:", a);

</script>

标签: javascripthtmlfunction

解决方案


推荐阅读