为什么函数的this关键字设置为window,但window没有作为属性的函数

时间:2013-02-17 20:05:12

标签: javascript

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

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

此代码的输出为:

  • 未定义
  • 窗口

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

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

1 个答案:

答案 0 :(得分:1)

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

window.testFnk未定义,因为您尚未将testFnk方法添加到window对象。您可以通过分配window或隐含地通过隐式全局(在严格模式下抛出异常,FYI)来明确地执行此操作;

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

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