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); }
本文向大家介绍Go语言WaitGroup使用时需要注意的坑,包括了Go语言WaitGroup使用时需要注意的坑的使用技巧和注意事项,需要的朋友参考一下 前言 WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。Golang 中的 WaitGroup 一直是同步 gor
本文向大家介绍php array_merge函数使用需要注意的一个问题,包括了php array_merge函数使用需要注意的一个问题的使用技巧和注意事项,需要的朋友参考一下 使用php语言的array_merge函数时,以为相同的键名会覆盖,但是请看如下代码: 会输出什么?我们预想中的是: 实际上输出的是: 不但没有被覆盖,而且数字键被重新连续索引了。 起初以为这个是bug,后来翻了php手册
本文向大家介绍jquery选择器需要注意的问题,包括了jquery选择器需要注意的问题的使用技巧和注意事项,需要的朋友参考一下 我们先来看段代码,很简单,如下 $("#div1 span")获得三个对象的数组 1.如果执行 $("#div1 span").html("aaa"),则数组内的所有对象都会改变.如下图 2.如果执行$("#div1 span").html(),只取值的话,则只会取数组第
本文向大家介绍Java应用打包后运行需要注意编码问题,包括了Java应用打包后运行需要注意编码问题的使用技巧和注意事项,需要的朋友参考一下 最近在做一个项目,项目总的来说就是和数据库打交道,取出数据来通过HTTP协议提交到一个接口上去。具体功能不多说了,只是讲这里面的一点——编码问题 项目当中,涉及到取所有数据的MD5值。 在Java项目中,个人喜欢将项目的默认编码改为UTF-8。使用的开发工具以
本文向大家介绍JavaScript中使用typeof运算符需要注意的几个坑,包括了JavaScript中使用typeof运算符需要注意的几个坑的使用技巧和注意事项,需要的朋友参考一下 typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象)。 1.'undefined' 2.'boolean' 3.'string' 4.'number' 5.'obj
本文向大家介绍Javascript中3个需要注意的运算符,包括了Javascript中3个需要注意的运算符的使用技巧和注意事项,需要的朋友参考一下 平时写惯了C#,所以会觉得什么样的运算符就应该做什么样的运算,但是有一天你的习惯被其他语言颠覆了,不知道是不是有一股强大的好奇 心,刚好在js中,我的这种习惯就被颠覆了,下面就看看哪些运算符颠覆了我的三观。 一:==运算符 ==运算符之所以可以颠覆