JS在函数内部变量

时间:2014-12-15 14:58:42

标签: javascript json

我有一个函数可以在onClick事件上做点什么。

function onDocumentMouseUp( event ) {
    createsprite(clickedposition);
}

createsprite(clickedposition) {
  var sprite = JSONSPITE // this add correctly sprite to my scene;
  //// here timer function 1 sec
  setTimeout(function(){ remove(sprite); }, 1000);
}

一切正常。 但是当我不止一次点击时,我仍然将我的变量精灵作为最后添加的精灵。 (是的,我知道这是正确的)。逻辑上remove()仅影响了最后一个。

使用未知数量的相同变量处理工作的正确解决方案是什么。 目的是它也按照创建顺序逐个点击一秒后删除每个精灵。

如果在同一个函数中只有一个变量,即使每个函数init上有更多具有相同名称的变量,也是如此。

1 个答案:

答案 0 :(得分:1)

您已将sprite定义为全局变量。它不仅存在于该函数中,而且还存在于窗口对象上。

如果你只想删除你在该函数中创建的精灵,你应该把它变成一个变量

var sprite = JSONSPITE; // typo?

这样,sprite变量的范围就是那个函数。

编辑: OP改变了他们的问题,使之前的解释显得过时

如果你想创建多个精灵,并将它们存储在某个地方,以便在删除之前可以访问它们,你可能想要创建一个精灵数组。

sprites = [];

function onDocumentMouseUp( event ) {
    createsprite(clickedposition);
}

function createsprite(clickedposition) {
  sprites.push(JSONSPITE); // Adds the current sprite to the end of the array
  setTimeout(function(){
    var firstSprite = sprites.shift(); // Takes the first sprite out of the array
    remove(firstSprite); 
  }, 1000);
}