我有以下代碼。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