循环中的let和const声明
一、循环中的let声明
每次循环的时候let声明都会创建一个新变量i,并将其初始化为i的当前值,所以循环内部创建的每个函数都能得到属于他们的i的副本。
最初的:
for (var i = 0 ; i < 10 ; i++) {
array.push(function(){
console.log(i)
})
};
array.forEach(function(func){
func()
})
优化后:
var array=[];
for (var i = 0 ; i < 10 ; i++) {
array.push(function(value){
return function(){
console.log(value)
}
}(i))
};
array.forEach(function(func){
func()
})
但是用了let更方便
var array=[];
for (let i = 0 ; i < 10 ; i++) {
array.push(function(){
console.log(i)
})
};
array.forEach(function(func){
func()
})
二、循环中的const声明
const属于常量定义,一经定义不能修改,在上述例子中,不可以用const,否则完成第一次迭代,就会抛出错误,但是可以用for in,for of语句的,与let用法一样
之所以能用,主要还是因为每次迭代不会修改已有的绑定,而是会创建一个新绑定。
循环中的let和const声明的更多相关文章
- JavaScript形而上的For循环中的Break
break相当于循环中的GOTO,需避免使用. 下面是一个break使用例子. 找出第一个months小于7的项目. const cats = [ { name: 'Mojo', months: 84 ...
- vue 如何在循环中 "监听" 的绑定v-model数据
vue 如何在循环中 "监听" 的绑定v-model数据 阅读目录 vue 如何在循环中 "监听" 的绑定v-model数据 1. 普通属性的值进行监听 2. ...
- 浅谈循环中setTimeout执行顺序问题
浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...
- for循环中i--的妙用 及 两变量互换数值的问题
int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * ...
- Python 之 for循环中的lambda
第一种 f = [lambda x: x*i for i in range(4)] (如果将x换成i,调用时候就不用传参数,结果都为3) 对于上面的表达式,调用结果: >>> f ...
- 在jquery中each循环中,要用return false代替break,return true代替continue。
在jquery中each循环中,要用return false代替break,return true代替continue. $.each(data, function (n, value) { if(v ...
- let、var、const声明的区别
前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...
- JS 使用const声明常量的本质(很多人都有误解)
在我们使用const声明常量时,总认为值一旦声明就不可改变,其实是有误解的: 刚在看ES6标准文档时,仔细阅读了const的解析,恍然大悟的感觉,分享给大家. 本质 const实际上保证的,并不是变量 ...
- ES6 let const 声明变量 块级作用域
ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...
随机推荐
- COGS314. [NOI2004] 郁闷的出纳员
★★★ 输入文件:cashier.in 输出文件:cashier.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] OIER公司是一家大型专业化软件公司,有着数 ...
- 制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
方法一:使用命令行创建制作 macOS High Sierra 正式版 USB 安装盘 首先,准备一个 8GB 或更大容量的 U盘,并备份好里面的所有资料. 下载好 macOS High Sierra ...
- linux修改单个进程的系统时间
简介 如下是 libfaketime 的一个简单实例. 在工作中常常需要测试修改时间,如果环境不允许调整时间,就要想办法调整单个进程的时间了. 编译安装 git clone https://githu ...
- TCP/IP的相关协议
- 安迪的第一本字典 - set--sstream
#include <iostream> #include <string> #include <set> #include <sstream> usin ...
- Python学习札记(六) Basic3 List和Tuple
参考:List Tuple Note List List是Python中一个很吊的数据结构,类似C语言的数组. 1.定义:listname = [variable 1, v2, v3, ..., vn ...
- linux一键安装mysql脚本
#!/bin/sh if [ -s /etc/my.cnf ];then rm -rf /etc/my.cnf fi echo "------------------------------ ...
- 读书笔记: Microsot .NET企业级应用架构设计
Microsot .NET企业级应用架构设计 Dino Esposito Andrea Saltarello 编 陈黎夫 译 人民邮电出版社 第一部分 设计原则 第1章 当代架构师和架构 ...
- du,df 磁盘管理
du会把指定目录下所有文件.目录.目录下的文件都统计.是建立在文件系统能看到的的确确是有这样一些文件的基础上的.也就是说我们能在文件系统里面看到的文件才会被du统计. df命令可以获取硬盘被占用了多少 ...
- H5唤起app
H5唤起app 1.判断是否在微信中打开 无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,android这边屏蔽sc ...