Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript作用域:引用任意新对象的计时器_Javascript_Scope - Fatal编程技术网

JavaScript作用域:引用任意新对象的计时器

JavaScript作用域:引用任意新对象的计时器,javascript,scope,Javascript,Scope,下面是我基本上要做的事情的代码: document.body.addEventListener("keypress", f1, false); function f1(e){ var span = document.createElement("span"); window.setInterval(function(){ ... window.clearInterval(this); document.body.r

下面是我基本上要做的事情的代码:

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

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

简言之,我正在尝试创建一个新的DOM元素,然后向其附加一个计时器,该计时器将能够引用该特定对象。问题是,我不知道如何处理上下文,所以这只是引用窗口,当我尝试引用span时,JavaScript抛出了一个错误,我本来不希望这样做。如何将间隔的上下文设置为在该函数中创建的DOM元素?

为间隔保留一个变量:

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

function f1(e){
    var span = document.createElement("span");
    var myInterval = setInterval(function(){
        ...
            clearInterval(myInterval);
            document.body.removeChild(span);
}
setInterval返回一个整数,它是计时器的id。因此,您所要做的就是存储它:

var interval = setInterval(function(){
// ...
    clearInterval(interval);

我认为您需要的是setTimeout,而不是setInterval…访问span时不应抛出错误。它仍然是局部范围的一部分。有趣的事实:clearInterval也可以用来清除超时…访问span不会抛出错误,但它也不能正常工作-所有元素仍然在页面上。如果让人困惑,我很抱歉,但是我确实想要setInterval,interval作为else语句的一部分被清除。我删除了所有控件以简化问题谢谢,但我正在尝试访问对象,我没有清除interval的问题。是的,你有这个问题。你使用的是一个区间,所以我认为它发生在这里:1区间函数被执行;2 clearInterval未能清除间隔;3.从DOM中删除该文件;4一段时间后,再次执行间隔功能;5清除间隔再次失败;6尝试删除会引发异常。谢谢,但我正在尝试访问对象,清除间隔没有问题。