JavaScript范围:定时器引用任意新对象

And*_*ham 0 javascript scope

这是我基本上要做的代码:

document.body.addEventListener("keypress", f1, false);

function f1(e){
    var span = document.createElement("span");
    window.setInterval(function(){
        ...
            window.clearInterval(this);
            document.body.removeChild(span);
}
Run Code Online (Sandbox Code Playgroud)

所以简而言之,我正在尝试创建一个新的DOM元素,然后为它添加一个能够引用该特定对象的计时器.问题是,我不知道如何处理上下文,所以this只是引用window,当我尝试引用时,JavaScript会抛出错误span(我还没想到它会工作).如何设置我在该函数中创建的DOM元素的区间上下文?

Max*_*Art 5

setInterval返回一个整数,它是计时器的id.所以,你所要做的就是存储它:

var interval = setInterval(function(){
// ...
    clearInterval(interval);
Run Code Online (Sandbox Code Playgroud)

  • 是的,你遇到了这个问题.你正在使用一个区间,所以我认为它发生在这里:1)执行区间函数; 2)`clearInterval`无法清除间隔; 3)从DOM中删除`<span>`; 4)过了一会儿,间隔函数_is再次执行_; 5)`clearInterval`再次失败; 6)试图删除`<span>`会引发异常. (2认同)