当前位置: 首页 > 编程笔记 >

Javascript的setTimeout()使用闭包特性时需要注意的问题

弘浩瀚
2023-03-14
本文向大家介绍Javascript的setTimeout()使用闭包特性时需要注意的问题,包括了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);

}

 类似资料:
  • 本文向大家介绍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中,我的这种习惯就被颠覆了,下面就看看哪些运算符颠覆了我的三观。 一:==运算符   ==运算符之所以可以颠覆