此代码块如何在 JavaScript 中工作
How this code blocks work in 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
为什么在第二个示例中未定义?这是如何工作的?
当你将函数引用传递给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);
相关文章:
- 在表单提交将DOM的一部分替换为分部之后,我应该将ajax成功绑定到什么来使我的javascript工作
- 我可以'不要让Javascript工作不正常
- 如何让我的html5功能不兼容警告使用javascript工作
- Excel Web Services 电子邮件 JavaScript 工作表
- 用于Google Fusion Table层的Javascript工作,但试图整理代码
- Bootstrap:如何附加一个类,并且仍然有BS Javascript工作
- JavaScript 工作队列
- JavaScript工作,直到我添加这个&&陈述
- 为什么不'在CasperJS中没有简单的JavaScript工作
- 如何"递归AJAX回调”;在JavaScript工作中
- 基本验证javascript工作不正常
- 需要帮助让这个字符串的Javascript工作
- HTML和JavaScript工作不正常
- 下拉菜单无法从CSS或Javascript工作
- 需要从erb生成一个非常特定的html来让javascript工作
- 如果javascript代码段未使用,它将阻止其他javascript工作
- 将内联事件处理程序移动到chrome扩展的javascript工作表
- 阻止其他Javascript工作的Javascript
- iframe阻止javascript工作
- 无法获取切换函数(JavaScript工作)