JS中for循环变量赋值
原创js中作用域只有函数作用域和全局作用域,在函数体内使用var 定义的变量,会被提到函数开始处进行定义,作用域为整个函数,常见的误区如下
var a=[];
for(var i = 0;i<10;i++){
var q = i;
a[i]=function(){console.log(q)}
}
a[0]()
其中,由于for循环并不是一个函数体,所以for循环中定义的变量q和i是作用域for循环所在的函数体,和a同级,
i++ 和 q=i 并不是重新定义变量,只是重复赋值,最终循环结束,i = 10,q=9;
由于function(){console.log(q)} 并不是立即执行,所以这里的q一直是存储的内存引用,最终所有的a[i]()都是输出 9
不过,在es6中新增了let命令声明变量,用法和var类似,不过let所声明的变量,只在let命令所在的代码块有效果,for循环的计数器中就很适合let命令
var a=[];
for(let i = 0;i<10;i++){
ley q = i;
a[i]=function(){console.log(q)}
}
a[6]() //这里会输出 6 let声明的变量仅在块级作用域有效,所以这里的i只在本轮循环有效果,每次循环的i其实都是一个新的变量
纯属个人观点,有误希望大家指点,谢谢
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
相关文章
- 解决SolidWorks2019许可证错误-85440
- 解决sklearn.datasets.fetch_20newsgroups下载速度慢的问题
- 解决sklearn.datasets.fetch_20newsgroups下载报错问题分享
- 解决Scratch3.0scratch-hex文件下载失败问题
- 解决RHEL7无法使用YUM源的问题
- 解决Qt应用中遇到的libpngwarningiCCPknownincorrectsRGBprofile问题
- 解决QT启动时找不到python36.dll问题
- 解决Qt5在麒麟Linux下不能输入中文问题
- 解决QT5.12.6使用32位MinGW编译器无法使用SSL协议问题
- 解决PyTorchCUDA编译问题指南
作者文章
- 解决SolidWorks2019许可证错误-85440 3个月前 (02-11)
- 解决sklearn.datasets.fetch_20newsgroups下载速度慢的问题 3个月前 (02-11)
- 解决sklearn.datasets.fetch_20newsgroups下载报错问题分享 3个月前 (02-11)
- 解决Scratch3.0scratch-hex文件下载失败问题 3个月前 (02-11)
- 解决RHEL7无法使用YUM源的问题 3个月前 (02-11)
热门
- 1 PHP导出csv文件 在PHP代码中想要将数据导出到浏览器,如下:持续下载 利用 php://output 输出流,以及 fputcsv 函数, yield 语法糖 public function export() { $regions = Regio...
- 2 Linux之使用Java空间 下载地址: Java Archive Downloads - Java SE 8u211 and later https://www.oracle.com/java/technologies/javase/javase8u211-late...
- 3 PHP生成器的操作yield功能优化 什么是生成器? 听着高大上的名字,感觉像是创造什么东西的一个功能,实际上,生成器是一个用于迭代的迭代器。它提供了一种更容易的方式来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。 说了半天不如直接看...
- 4 一文看懂字符和字节的意思 前言 我们在数据库建表时,经常会困扰某个字段应该选择什么数据类型,以及填写什么长度。选择数据类型方面一般没什么大问题,但是在填写对应的长度的时候,很多人就会困扰,对应长度填写的数字到底是什么含义,以及会影响到哪些东西。笔者在翻阅网上的相关文...
- 5 css三角形原创 &::after { content: ‘’; position: absolute; width: 0; height: 0; border-top: 30rpx solid #fff; border-left: 30rpx so...
- 6 PHP使用redis实现分布式锁 话不多说直接上代码 $redisLock = Redis::lock(key, value, 5);//key使用商品id,value使用用户id拼接时间戳和随机字符 try { //获取锁:适用于n个人抢1个商品的场景,避免出现多...
- 7 SQLserverDate对象 前言: 在SQL server在中,当我们以日期和时间格式处理数据时,需要确保数据的格式与数据库中要求的格式一致,否则很容易看到数据无法插入到数据库中。或者在查询数据时存在显示不完整的问题。 我们可以通过数据库内置的日期处理程序来解决数据格...
- 8 JAVA内存泄漏详解(范例及解决办法)版权声明 尝试了通过一张图片转载,效果还可以,就是原博主的代码格式太酷炫,亮瞎了哈。?...
- 9 JavaScript编程实现防抖和排气 一、什么是防抖和节流 Ps : 比如搜索框,用户在输入的时候使用 change 事件去调用搜索,如果用户每一次输入都去搜索的话,那得消耗多大的服务器资源,即使你的服务器资源很强大,也不带这么玩的。 防抖 - debounce 其中一...
- 10 php前后端通过json数据传值转载 前端密钥代码密钥前端代码前端密钥代码(需要下载jquery-3.3.1): <script src="js/jquery-3.3.1.min.js" type="text/javascript"...
最新文章
- 解决SolidWorks2019许可证错误-85440 3个月前 (02-11)
- 解决sklearn.datasets.fetch_20newsgroups下载速度慢的问题 3个月前 (02-11)
- 解决sklearn.datasets.fetch_20newsgroups下载报错问题分享 3个月前 (02-11)
- 解决Scratch3.0scratch-hex文件下载失败问题 3个月前 (02-11)
- 解决RHEL7无法使用YUM源的问题 3个月前 (02-11)
- 解决Qt应用中遇到的libpngwarningiCCPknownincorrectsRGBprofile问题 3个月前 (02-11)
- 解决QT启动时找不到python36.dll问题 3个月前 (02-11)
- 解决Qt5在麒麟Linux下不能输入中文问题 3个月前 (02-11)
- 解决QT5.12.6使用32位MinGW编译器无法使用SSL协议问题 3个月前 (02-11)
- 解决PyTorchCUDA编译问题指南 3个月前 (02-11)