我有以下代码。Javascript做while,setTimeout,事件变量作用域
document.getElementById("whatever").addEventListener("click", function(e){
var target = e.target;
var search = "TR";
do{
if(target.nodeName.toUpperCase() === search) {
window.setTimeout(function(){
console.log(target);
});
}while(target = target.parentNode);
});
我的印象是,由于可变对象是在window.setTimeout的外范围,onclick事件侦听器闭合内部,这将是提供给的setTimeout的范围,但显然也就是下不是这样。为什么是这样?这里究竟发生了什么?
我知道我可以做这个通过上下文进入设置超时匿名函数,
window.setTimeout(function(){
console.log(this);
}.bind(target);
但我仍处于亏损状态,为什么目标将无法使用设定的超时匿名函数的一部分的事件监听器关闭。
在此先感谢您对如何解决关闭工作的误解所做的回复和道歉。
范围中的变量*为*。但是当你访问它时,你已经迭代它直到它为空。 – Bergi