JavaScript对象上下文和函数

时间:2013-05-07 18:09:47

标签: javascript

在下面的代码片段中,为什么window.foo存在,但this.bar未定义?

function foo() { 
  function bar() {  }; 
  console.log(this.bar); 
}

console.log(window.foo);
foo.call({});

1 个答案:

答案 0 :(得分:-1)

在浏览器中,窗口是一个全局对象,因此它可以在任何地方使用,除非它被遮蔽。 this仅指向被称为方法的函数体中有用的东西;在foo.bar()中 - barthisfoo,或者调用bar.call(...)或bar.apply(...)时this的参数,或者当你完全在一个函数调用之外时,它指向全局对象(窗口)。

你明确地做了foo.call({}),它将它设置为一个空的Object。所以this.bar在那次通话中不存在。