javascript之循环保存数值
javascript之循环保存数值
语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处.
先看下面这段代码
for(var i=0;i<a.length;i++){
a[i].onclick=function(){
console.log(i);
};
}
onclick为点击,第二行代码为当点击是发生的事件
在js中,假设我之前的代码都正确且a已经声明过,a.length为2,这时候的控制台输出是什么?
我之前以为应该是0,1.
然而控制台给出的结果是2.
这是js中常见的一个错误,经常发生.为什么?
分析:i=0,i<2,进入循环后,i++变为1
i=1,i<2,进入循环后,i++变为2
i=2,i<2不成立,不进入循环,此时i为2
当程序运行时,for循环以极其快的速度运行结束,i瞬间变为2.当我点击a[i]时,此时的事件才发生,而i已经为2.所以控制台输出为2
再看一段代码:
for(var i=0;i<a.length;i++){
a[i].onclick=function(){
console.log(a[i]);
};
}
还是像上面那样分析,
i=0,i<2,进入循环后,i++变为1
i=1,i<2,进入循环后,i++变为2
i=2,i<2不成立,不进入循环,此时i为2
当程序运行时,for循环以极其快的速度运行结束,i瞬间变为2.当我点击a[i]时,此时的事件才发生,而i已经为2.a[2]是不存在的,所以报错.
如果我想存储住这个i的数值,怎么样才能通过i的值来调用a[i],让控制台输出当前的a[i]的值?这个时候我们需要用一个属性来保存这个i的值,假设我设这个属性为index,那么这个代码怎么写呢?又应该如何来调用呢?再看下面这段代码
for(var i=0;i<a.length;i++){
a[i].index=i;
a[i].onclick=function(){
console.log(this.index);
};
}
运行之后的结果为我点击a[0]时控制台输出0,点击a[1]时控制台输出1.
通过以上的例子,我们能得知,要给a[i]一个属性来保存这个值以便调用,为什么这样?
a[i].index=i这句话我们可以这么理解
a[0].index=0
a[1].index=1
这就是我把每一个a[i]的index都给他一个值,这样当我想选择谁的时候,谁就可以被我选择。a[i]就是一个对象,index就是属性。
万物皆对象,对象是谁,你操纵谁,你控制谁。
javascript之循环保存数值的更多相关文章
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- JavaScript的循环语句
JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...
- JavaScript while 循环
JavaScript while 循环的目的是为了反复执行语句或代码块. 只要指定条件为 true,循环就可以一直执行代码块. while 循环 while 循环会在指定条件为真时循环执行代码块. 语 ...
- JavaScript进阶(六)用JavaScript读取和保存文件
用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...
- matlab循环保存dat文件
将数据保存为dat文件 这里有两种方法,第一种是: save filename dataname; 这种方法书写简单,但是功能也很简单.这里的filename就是死的filenam,即filename ...
- JavaScript for循环实现表格隔行变色
本代码主要演示的是for循环, <!doctype html> <html lang="en"> <head> <meta charset ...
- JavaScript数组循环
JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)
JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...
- JavaScript 事件循环
JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...
随机推荐
- CSS实现文字省略
1.首先给用于放文本的标签元素设置一个宽度值,并设置溢出属性overflow为溢出隐藏. width: 245px;/*一定要设置固定宽度*/ overflow: hidden;/*不显示超过对象尺寸 ...
- Beta版本冲刺第七天
Aruba 408 409 410 428 429 431 完成任务: 新增:完成文字导出为图片并改善画布大小 改进:适应MIUI系统相册选图 改进:调整activity间的跳转逻辑 改进:调整编辑窗 ...
- windows使用git时出现:warning: LF will be replaced by CRLF
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示: 执行以下代码 $ rm -rf .git // 删除.git $ git config -- ...
- RocketMQ原理解析-NameServer
Namesrv名称服务,是没有状态可集群横向扩展. 1. 每个broker启动的时候会向namesrv注册 2. Producer发送消息的时候根据topic获取路由到broker的信息 3. Con ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- mysql 远程连接数据库的二种方法
http://blog.csdn.net/freecodetor/article/details/5799550 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5 ...
- iOS - 滑屏方案
参考自:iOS开发- 通过ChildViewCotroller ViewController容器 产品增加新的版面,类似于网易新闻,百度新闻,腾讯新闻等新闻客户端首页多屏幕滑屏切换,找了一些开源代码研 ...
- 一道javascript数组操作题
题目如下: var arr = ['100px','abc'-6,[],-98765,34,-2,0,'300',,function(){alert(1);}, null, document, [], ...
- JavaScript中的静态成员
静态:共享 一.公有静态成员(作为函数的属性即可): var Gadget = function(price) { this.price = price; } Gadget.isShiny = fun ...
- 个人对B/S项目的一些理解(二)
以下是我自工作以来,结合对C/S项目的认知,对B/S项目的一些理解. 如有不足或者错误,请各位指正. ----数据处理的升级 在上面的描述中,大家也看到了,远古时期的程序员,其实也听不容易 ...