js for 循环中的 变量问题。
今日处理项目中的一个循环,本来就是一个小小的for循环,后来发现该段程序出现了问题,仔细检查代码没有发现其中的错误。无奈只好叫来了老大帮忙。通过在模版中断点调试(该方式只能自己写debugger断点)我们找到了问题的所在。首先看我们的循环:
- for(var i =0, len = arr.length; i<len; i++){
- console.log(arr[i]);
- for(var i=0; i<x.length; i++) {
- console.log(x[i]);
- }
- }
这是一个很简单的嵌套循环,但问题出在这里。我们在第一个for循环内定一个变量I,同时在第二个循环中也定义了同名的i,根据老大的说法是: 第二个i是局部变了,它的定义不影响外层的i。但是,经过调试,结果与他说的完全相反。无论是第一个for循环中的i或者第二个循环中的i都是同一个全局变量,所以第二个循环中的变量将第一个i覆盖了!!!.也就是说for()循环中的作用域是全局的,是指向父级,并不是像function一样创造了一个独立的环境。为了证实这个说法,我们可以写下列例子。
- for(var i =0; i<5; i++){
- console.log(i);
- for(var i=0; i<8; i++) {
- console.log(i);
- }
- }
可以在浏览器中看到他连续输出一段数字:
第一个0是外层的for输出的,接下来所有的数字都是里面那层for循环输出的。可以看到,外层只循环了一次,这是因为在里面那个关键字i循环过后被复制为8,那么当外面那层做第二循环的时候会对比条件i<5,显然,此时该条件已经不满足了,外层就不会再循环了。但是还是会执行一下i++,最后,i就成了9.
一个很小的问题,被困住了将近半个小时,幸好有老大指点。所以以后大家在做多重循环的时候就要注意这个问题了。
js for 循环中的 变量问题。的更多相关文章
- 【SQL】小心在循环中声明变量——浅析SQL变量作用域
本文适用:T-SQL(SQL Server) 先看这个语句: --跑3圈 BEGIN --每圈都定义一个表变量,并插入一行 DECLARE @t TABLE(Col INT PRIMARY KEY) ...
- 用闭包解决 js 循环中函数变量暂存问题
需求:有一个数组,根据数组的值渲染对应的数字div,单击对应的div 在控制台打印对应的数字.如点击1,控制台打印1. 问题: 不管点击哪个值 打出来都是4 代码如下 <!DOCTYPE htm ...
- js for循环中定义clike事件由于闭包导致的循环变量获取不到的问题
在网上找的 记下来以备不时之需 案例; 本人有一个数组按钮 循环数组按钮 给每个按钮添加click事件 原本以为搞定但是出现了 每个按钮都是数组最后的方法 然后查找问题 发现onclike事件中的i ...
- for循环中的变量泄漏
经典的案例 let arr = [] for(var i =0;i<=5;i++){ arr[i]= function fn(){ console.log(i) } } arr[0]() //6 ...
- JS(面试中的变量类型和计算问题)
JS(变量类型和计算) 题目1.JS 中使用 typeof 能得到那些类型? 题目2.何时使用 === 何时使用==? 题目3.JS 中有哪些内置函数? 题目4.JS 变量按照存储方式区分为那些类型, ...
- Python语言程序设计之一--for循环中累加变量是否要清零
最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...
- 16.1 foreach 循环中捕获变量的变化
在 foreach 循环内的匿名函数(通常为Lambda表达式)中捕获循环 变量时要格外小心.代码清单16-1就展示了这样一个简单的示例,它看上去似乎会输出 x . y . z . string[] ...
- JS调用C#中的变量
今天早上做项目,需要使用JS来得到数据库里面表的行数.经过查找资料,知道可以使用在C#中定义一个全局变量.在JS中调用即可,自己总结一下:供日后参考; public string Str() { st ...
- js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题)
js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题) 一.总结 需要好好看下面代码 本质是因为匿名函数用到了循环中的变量,而普通方式访问的话,匿名函数的访问在循环之后,所以得到的i是循环 ...
随机推荐
- 2-2. Initializing Objects with Initializer Lists
Using Uniform Initialization to Construct a vector #include <iostream> #include <vector> ...
- 用jquery编写的分页插件
用jquery编写的分页插件 源码 function _pager_go(total_page) { var page_str = $("#_pager_textbox").val ...
- HTML颜色代码表
#000000 #2F0000 #600030 #460046 #28004D #272727 #4D0000 #820041 #5E005E #3A006F ...
- Laravel 学习笔记 —— 神奇的服务容器 [转]
容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或 ...
- Intelij IDEA 2016.3安装mybatis插件并激活教程
转载自:http://blog.csdn.net/solo_talk/article/details/53540449 现在Mybatis框架越来越受欢迎,Intelij IDEA这个编辑器逐渐成为很 ...
- 用datagrid实现完整的一个页面
打怪升级真的好难,记录一点一滴,一滴一点,先上效果图. 1.想完成一个界面,先得有界面.界面是在WebRoot下的根目录文件中新建的zjqktj.jsp中建立的,再通过java在后台调用数据库取出数据 ...
- Linux SVN 命令详解(zz)
Linux下常用SVN命令 2012-04-02 11:46:00 标签:服务器 目录 Linux checkout linux系统 1.将文件checkout到本地目录 svn checkout p ...
- ZOJ3774_Power of Fibonacci
求fibonacci数列前N个数的K次方和. 通项公式:F[n]=((1+sqrt(5))/sqrt(5)-(1-sqrt(5))/sqrt(5))/sqrt(5). 有点乱,不过由于可以保证最后的结 ...
- rbx1 package 下载安装过程
学习INSTALLING THE ROS-BY-EXAMPLE CODE,是书中第五章的内容,如果我们按照上一篇教程执行过了,就可以直接进入第五章,安装一个叫rbx1的包.这个包里面包括了本书中用到的 ...
- 更改 Skype for Business Online 的 Sip 地址以匹配UPN
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...