输入一个值,点击之后,控制台从您输入的这个值开始递增加1打印
我的实现方式:贴上代码
<input type="text" id="i">
<button id="btn">点击</button>
<script>
var btn = document.getElementById("btn");
var input = document.getElementById("i");
btn.onclick = function() {
// alert(1);
var i = input.value;
function a() {
i++;
console.log(i);
}
setInterval(a,2000);
}
</script>
监听函数里面包含一个闭包函数和间歇调用函数。当您输入1的时候,2s(时间取长一点可以看出效果)过后开始执行闭包函数,然后控制台依次输入1,2,3...然后在此期间,改变输入值,比如100,然后控制台会与第一次的输入交替输出100,101,102..。
重新输入数字之后,按下按钮,都会重新执行代码,交替打印是因为上一次点击时产生的闭包未销毁还在内存中引用着上一次点击时的函数活动对象,又由于JavaScript是单线程解释器,所以两个闭包在争夺资源。不知理解正确?
如果我上面的理解正确,我想问的是,如何在下次重新输入值并点击时释放上次闭包引用,按照重新输入的值开始递增?
在点击事件的外部定义一个变量timer,点击的时候先判断下timer是否被赋值,赋值的话清除timer,最后将定时器赋值给timer。
代码示例:
var timer ;
btn.onclick = function(){
}