Javascript的setTimeout()使用闭包特性时需要注意的问题
setTimeout经常被用于延迟执行某个函数,用法为:
setTimeout(function(){
…
}, timeout);
有时为了进行异步处理,而使用setTimeout(function…,0);比如:
function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);
return …;
}
在setTimeout设定的函数处理器之前,函数f返回;
在使用异步处理时,尤其是使用闭包特性时,要特别小心;
例如:
for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}
对于初次使用这种方式的同学来说,很可能会认为程序会打印0…9,可结果确实打印10个10;
问题就在于,当循环完成时,function得到执行,而i已经变成10,console.log(i)中使用的是10!
加入你的目的是打印0…9,那么可以换一种方式,用函数参数来保存0….9(其实也是利用了闭包):
for(var i = 0 ; i < 10; i++){
setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}
相关推荐
-
JS中setTimeout的巧妙用法前端函数节流
什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等等事情,那么这时候窗口缩放的时候,有可能连续发多个请求,这并不是我们想要的,或者是说我们常见的鼠标移入移出tab切换效果,有时候连续且移动的很快的时候,会有闪烁的效果,这时候我们就可以使用函数节流来操作.大家都知道,DOM的操作会很消耗或影响性能的,如果是说在窗口缩放的时候,为元素绑定大量的dom操作的话,会引发大量的连续计算,比如
-
快速掌握Node.js中setTimeout和setInterval的使用方法
Node.js和js一样也有计时器,超时计时器.间隔计时器.及时计时器,它们以及process.nextTick(callback)函数来实现事件调度.今天先学下setTimeout和setInterval的使用. 一.setTimeout超时计时器(和GCD中的after类似) 在node.js中可以使用node.js内置的setTimeout(callback,delayMillSeconds,[args])方法.当调用setTime()时回调函数会在delayMillSeconds后 执行
-
setTimeout学习小结
大致介绍 今天看了一篇文章,觉得写得不错,所以学习了一下,这篇博客是我自己的理解和总结 原文:你应该知道的 setTimeout 秘密 主要内容: 1.setTimeout原理 2.setTimeout(function(){..},0)的意义 3.setTimeout的this指向和参数问题 setTimeout原理 先来看一段代码: var start = new Date(); setTimeout(function(){ console.log(new Date() - start);
-
js中setTimeout()与clearTimeout()用法实例浅析
本文实例分析了js中setTimeout()与clearTimeout()用法.分享给大家供大家参考.具体分析如下: setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout. <input type = text id = aaa > <input type = button value = stop id = bb onclick = bb()> <scrip
-
JavaScript中停止执行setInterval和setTimeout事件的方法
js 代码中执行循环事件时,经常会用到 setInterval 和 setTimeout 这两个方法,关于这两个方法的细节这里不详细讨论了,简要分享下在需要停止循环事件的时候该如何操作. (1)setInterval 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式,停止该方法可使用 clearInterval 方法.具体示例如下: 复制代码 代码如下: <html> <meta http-equiv="Content-Type" content="t
-
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
废话不多说了,直接给大家贴代码了. // 每隔五秒定时刷新当前窗口 setTimeout("self.location.reload();",5000); //js 定时关闭窗口(ie和FF中测试过) //6秒后自动关闭当前窗口 setTimeout("window.opener=null;window.close()",6000); 下面给大家介绍下javascript定时器使用 使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方
-
javascript中SetInterval与setTimeout的定时器用法
示例一: 查看演示 下载源码 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则是在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除.也就是说setTimeout()只执行一次,setInterval()可以执行多次.两个函数的参数也相同,第一个参数是要执行的code或句柄,第二个是延迟的毫秒数. setTimeOut用法 setTimeout函数的用法如下: var timeoutID = window.setTi
-
js中的setInterval和setTimeout使用实例
setInterval() 定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来执行函数或表达式.该方法会不停地循环调用函数,直到使用 clearInterval() 明确停止该函数或窗口被关闭.clearInterval() 函数的参数即 setInterval() 返回的 ID 值. 语法 setInterval(code,millisec[,"lang"])code 必需.要调用的函数或要执行的代码串.millisec 必须.周期性执行或调用 code 之间
-
JavaScript中setTimeout的那些事儿
一.setTimeout那些事儿之单线程 一直以来,大家都在说Javascript是单线程,浏览器无论在什么时候,都且只有一个线程在运行JavaScript程序. 但是,不知道大家有疑问没--就是我们在编程过程中的setTimeout(类似的还有setInterval.Ajax),不是异步执行的吗?!! 例如: <!DOCTYPE html> <head> <title>setTimeout</title> <meta http-equiv="
-
js中settimeout方法加参数
js中settimeout方法加参数的使用.简单使用看w3school 里面没有参数调用, 例子: 复制代码 代码如下: <script type="text/javascript"> function timedMsg() { var a ="dd"; var t=setTimeout(function(){ cao(a);},3000) } function cao(a) { alert(a); } </script> </head
-
JavaScript中SetInterval与setTimeout的用法详解
setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止 参数 描述 code 必需,要调用的函数后要执行的 JavaScript 代码串. millisec 必需,在执行代码前需等待的毫秒数. setTimeinterval setInterval(code,millisec[,"lang"]) 参数
随机推荐
- jQuery支持动态参数将函数绑定到事件上的方法
- Vuejs 页面的区域化与组件封装的实现
- Vue数组更新及过滤排序功能
- Java中的随机数详解
- Java语言实现对MySql数据库中数据的增删改查操作的代码
- js动态调用css属性的小规律及实例说明
- asp.net生成HTML
- Laravel 5框架学习之Blade 简介
- PHP读取数据库并按照中文名称进行排序实现代码
- PHP+MYSQL的文章管理系统(二)
- java jdbc连接和使用详细介绍
- javascript实现全角转半角的方法
- 微信小程序前端源码逻辑和工作流
- 浅析Java中线程的创建和启动
- jQuery实现表格元素动态创建功能
- Jquery修改页面标题title其它JS失效的解决方法
- layui导航栏实现代码
- jQuery控制TR显示隐藏的几种方法
- PHP中把有符号整型转换为无符号整型方法
- Android编程实现项目中异常捕获及对应Log日志文件保存功能