0

可能重复:
在对象原型方法中的 setInterval/setTimeout 中引用“this”

第二个警报框说“未定义”?为什么是这样?

<a id = "clickme">Click Me!</a>
<script>
var a = document.getElementById("clickme");
a.onclick = function(); {
    alert(this.innerHTML);
    setTimeout( function() {
        alert( this.innerHTML );
    }, 1000);
};
</script>
4

2 回答 2

3

因为在function你传递给的内部setTimeoutthis不再是a元素。它将是global对象(window在浏览器领域)或undefined严格模式。

相反,存储对this;的引用

var a = document.getElementById("clickme");
a.onclick = function(); {
    var that = this;

    alert(this.innerHTML);
    setTimeout( function() {
        alert( that.innerHTML );
    }, 1000);
};
于 2012-12-06T02:01:20.397 回答
1

https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout#The_.22this.22_problem

this在处理程序中具有不同的值setTimeout

于 2012-12-06T02:02:38.133 回答