闭包知识
1、闭包的概念:指有权访问另一个函数作用域中的变量的函数,一般情况就是在一个函数中包含另一个函数。
2、闭包的作用:访问函数内部变量、保持函数在环境中一直存在,不会被垃圾回收机制处理
因为函数内部声明 的变量是局部的,只能在函数内部访问到,但是函数外部的变量是对函数内部可见的,这就是作用域链的特点了。
举例
var countDown = function(){ for(var i=10;i>0;i--) { setTimeout(function(){console.log(i);},1000); } }
当然这个是没有实现倒计时功能的,原因呢:
首先,和setTimeout设置的时间是没有关系的,很多人怀疑是时间设置的问题,不信可以将时间设置为0,结果是一样的,这里就不演示了。
当然,得分析分析setTimeout的循环机制:setTimeout是从队列结束的时候开始计时的,如果前面有进程没有结束,那么它就等到它结束再开始计时,在这里呢,任务队列就是它自己所在的循环。循环结束setTimeout才开始计时,所以无论如何,setTimeout里面的i都是最后一次循环的
解决方法如下:
var countDown = function(){ for(var i=10;i>0;i--) { var a =function(v){ return function(){ console.log(v); } } setTimeout(a(i),1000); } }
以上就是javascript使用settimeout闭包实现倒计时的方法,不知道大家有什么更优的方案吗,如果有的话,记得分享给我哦,感谢您访问“我爱捣鼓(www.woaidaogu.com)”网站的内容,希望对大家有所帮助!引用本文内容时,请注明出处!谢谢合作!