此代码如何阻止JavaScript中的工作?

时间:2016-03-19 15:55:01

标签: javascript

让我们看看例子:

第一

var user = {
  firstName: "John",
  sayHi: function() {
  alert( this.firstName );
  }
};

setTimeout(function() {
  user.sayHi(); // John
}, 1000);

第二

var user = {
  firstName: "John",
  sayHi: function() {
  alert( this.firstName );
  }
};

setTimeout(user.sayHi, 1000);// undefined

为什么在第二个示例 undefined ?这是如何工作的?

1 个答案:

答案 0 :(得分:4)

当您将函数引用传递给setTimeout函数时,传递的函数引用将在window范围内执行。因此,window.firstName将为undefined,因为您没有window这样的对象中的任何属性。

var user = {
  firstName: "John",
  sayHi: function() {
  alert( this.firstName );
  }
};

setTimeout(user.sayHi.bind(user), 1000);

因此,您可以在上面的代码中看到,您必须将范围显式绑定到函数引用。而且你也可以使用传统的方式,即使用如下的匿名函数,

setTimeout(function(){ user.sayHi(); }, 1000);