【发布时间】:2018-11-22 14:50:29
【问题描述】:
var user = {
firstName: 'Вася',
sayHi: function(who) {
console.log(`firstname - ${this.firstName}: Привет, ${who}`);
}
}
setTimeout( function() {user.sayHi('asd')}, 2000 );
我得到 user.sayHi 不是函数错误,因为 user 未在 setTimeout 调用的上下文中定义。 afaik setTimeout 上下文是window,通过var定义对象会将该对象放入window object,那为什么是undefined(1)?
2。将 var 更改为 let 将起作用!为什么?
3。输入
var x = user
并将 user.sayHi 更改为 x.sayHi 也可以!我不明白为什么。由于 var x 和 var user 对我来说是相同的定义。 请解释一下
【问题讨论】:
-
除此之外,您还有其他代码可能碰巧也在使用
user变量吗?似乎必须有其他东西在改变它,使它不再指向这个 sn-p 中定义的对象。 -
你能用 sn-p 重现这个问题吗?
-
哎呀。 ty James,确实是另一个脚本干扰,抱歉占用您的时间 :) shy
-
我猜您正在对用户(多个)使用 for 循环。建议您改用 users.forEach。类似
users.forEach(user=>setTimeout(()=>user.sayHi('asd')))
标签: javascript this settimeout