clearInterval()中的闭包?

clearInterval(id);请问这个函数是闭包吗
为什么clearInterval(setInterval(frame, 5)) 这样写不行,必须var id 这样子声名

<!DOCTYPE html>
<html>
<style>
#container {
  width: 400px;
  height: 400px;
  position: relative;
  background: yellow;
}
#animate {
  width: 50px;
  height: 50px;
  position: absolute;
  background-color: red;
}
</style>
<body>

<p><button onclick="myMove()">单击我</button></p> 

<div id ="container">
  <div id ="animate"></div>
</div>

<script>
function myMove() {
  var elem = document.getElementById("animate");   
  var pos = 0;
  var id = setInterval(frame, 5);
  function frame() {
    if (pos == 350) {
      clearInterval(id);
    } else {
      pos++; 
      elem.style.top = pos + "px"; 
      elem.style.left = pos + "px"; 
    }
  }
}
</script>

</body>
</html>
阅读 1.3k
2 个回答

你理解错了,clearInterval(setInterval(frame, 5)) 情况下 frame 不可能执行

而 var id 情况下你是把 clearInterval(id) 放到了 frame 里,frame 一定会执行

而且和 clearInterval(setInterval(frame, 5)) 等价的 var id 形式是

var id = setInterval(frame, 5); clearInterval(id)

你想要的有可能是 setTimeout ?

如果你说的成立,那么从 clearInterval(setInterval(frame, 5)) 上无法读到什么时候结束循环

你可以考虑封装一下。传入一个参数,几秒一次,执行多少次,自动取消。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题