js典型题--从闭包开始
来源:互联网 发布:js隐藏手机号码中间 编辑:程序博客网 时间:2024/05/18 18:20
一个不起眼的开始
for(var i=0;i<5;i++){ setTimeout(function () { console.log(i) },1000) }console.log(i)//5 5,5,5,5,5
这里涉及到javascript的单线程异步机制,详细介绍见 http://blog.csdn.net/alex8046/article/details/44494859
javascrip是单线程语言,所有异步事件(计时器、鼠标事件、ajax...)在所有时间执行完毕之后才能执行,并且单线程事件几乎在同一时间内执行完毕,因此,在for循环结束后,i已经变为5,而settimeout事件在1秒之后输出5个5。
如果希望输出值变为 5 0,1,2,3,4 改如何进行改进?
1.闭包,将变量保存
for(var i=0;i<5;i++){ (function (j) { //闭包,j=i setTimeout(function () { console.log(j) },1000) })(i) }console.log(i)
2.循环体内进行函数传参,保留变量
var fn=function (i) { setTimeout(function () { console.log(i) },1000) } for(var i=0;i<5;i++){ fn(i) } console.log(i)
阅读全文
0 0
- js典型题--从闭包开始
- js闭包 典型举例
- 笔记一把,JS闭包的典型实例
- 从JS开始-1
- 从JQuery到JS 关于闭包
- node.js,从这里开始
- 从基础开始 - resizable.js
- 从基础开始-draggable.js
- 从源码开始制作deb包
- 从两个函数来学习js闭包的概念
- js从当前日期推算开始日期
- 重视前端技术从node.js开始
- pdf.js源码学习从helloworld开始
- js从0开始构思表情插件
- 从js的循环问题来看待js的闭包本质
- 从源码开始(Hello World) 制作deb包
- 【腾讯TMQ】从wireshark抓包开始学习https
- javascript 执行顺序和闭包典型应用
- javascript--函数(一)
- 中国省份及简称记录
- 基于Jquery/cropper插件的使用。头像截切/裁剪图片。
- javascript--函数(二)
- Android WebView 加载网页只显示空白页不显示网页
- js典型题--从闭包开始
- mobile下拉刷新下一页
- javascript--对象
- 安装webstorm vue插件
- javascript--对象的特性
- 数组对象,字符串对象,Match对象
- PHP魔术方法归纳
- 浏览器对象模型--BOM
- 线性代数教程之二——特征分解