0
(function() {
  var testFnk = function() {
    console.log(this);
  }

  console.log(window.testFnk);
  testFnk();
})();

这段代码的输出是:

  • 不明确的
  • 窗户

你能解释为什么在函数内部 this 指的是 Window,但检查 window.testFnk 是未定义的吗?

编辑:当我查看答案时,我的问题没有明确说明。我要说的是:为什么在这两种情况下记录的值都是“未定义”或“窗口”?

4

1 回答 1

1

因为在非严格模式下,this默认为window在浏览器中。在严格模式下,它将是undefined.

window.testFnk未定义,因为您尚未将testFnk方法添加到window对象。您可以通过分配来显式执行此操作window,也可以通过隐式全局隐式执行此操作(这将在严格模式下引发异常,仅供参考);

(function() {
  window.testFnk = function() {
    console.log(this);
  }

  console.log(window.testFnk);
  testFnk();
})();
于 2013-02-17T20:11:51.293 回答