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之循环保存数值的更多相关文章

  1. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  2. JavaScript的循环语句

    JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...

  3. JavaScript while 循环

    JavaScript while 循环的目的是为了反复执行语句或代码块. 只要指定条件为 true,循环就可以一直执行代码块. while 循环 while 循环会在指定条件为真时循环执行代码块. 语 ...

  4. JavaScript进阶(六)用JavaScript读取和保存文件

    用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...

  5. matlab循环保存dat文件

    将数据保存为dat文件 这里有两种方法,第一种是: save filename dataname; 这种方法书写简单,但是功能也很简单.这里的filename就是死的filenam,即filename ...

  6. JavaScript for循环实现表格隔行变色

    本代码主要演示的是for循环, <!doctype html> <html lang="en"> <head> <meta charset ...

  7. JavaScript数组循环

    JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...

  8. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

  9. JavaScript 事件循环

    JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...

随机推荐

  1. Something Strange (to be completed)

    ~/.local/share/applications/swt.desktop [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application ...

  2. PostgreSQL

    PostgreSQL新手入门   作者: 阮一峰 日期: 2013年12月22日 自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选. 本文介绍PostgreSQ ...

  3. web应用中浏览器与服务端的编码和解码

    转自:http://blog.sina.com.cn/s/blog_87cb63e50102w2b6.html 以下为正文: ************************************* ...

  4. Table 表单

    <style> table th { white-space: nowrap; } .chk { white-space: nowrap; } </style> <tab ...

  5. SQLServer------Join的使用方法

    参考菜鸟教程网: http://www.runoob.com/sql/sql-join.html select a.Canteen,b.OrderNum,b.CreateTime,c.Name fro ...

  6. NFS 文件系统

    NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的. NFS服务的主要配置文件 /etc/exports /etc/exports文件内容格式: <输出目 ...

  7. python3 安装scrapy

    twisted(网络异步框架) wget https://pypi.python.org/packages/dc/c0/a0114a6d7fa211c0904b0de931e8cafb5210ad82 ...

  8. Linux常用命令和Shell编程基础

    目录相关 cd - .与.. 分别表示当前目录和父目录 - ~与$HOME 都是指当前用户的主目录 - cd – 切换到上一次所在的目录(不一定是父目录) pwd - pwd 显示当前目录 - $PW ...

  9. C# Byte[] 转String 无损转换

    C# Byte[] 转String 无损转换 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// string 转成byte[ ...

  10. 【linux使用】bash shell命令行常用快捷键 (转载)

    移动: Ctrl + A: 移动到当前编辑的命令行首, Ctrl + E: 移动到当前编辑的命令行尾, Ctrl + F 或 ->:按字符右移(往命令行尾部方向,前移) Ctrl + B 或 & ...