又来更新学习笔记啦~数组
let数据结构
特色闭包
const异步
特色学习
let的出现是为了解决一些var存在的问题spa
// 下面两个i,虽然名字同样,可是不在一个做用域,因此互不影响 for (let i = 0; i < 3; i++) { let i = 'foo' console.log(i) // foo }
const arr = [1, 2, 3, 4] for(let i = 0; i < 3; i++) { for(let i = 0; i < 4 ; i++) { console.log(arr[i]) } } // 1 2 3 4 1 2 3 4 1 2 3 4
for (var i = 0; i < 3; i++) { setTimeout(() => { console.log(i) }, 0) } // 输出三个3
{ let a = 1 console.log(a) } console.log(a) //a is not defined
var b = 3 let c = 4 console.log(b, c) // 3,4 console.log(window.b, window.c) //3,undefined
var b = 3 let c = 4 console.log(b, c) // 3,4 var b = 4 console.log(b) //4 let c = 5 // Identifier 'c' has already been declared c已经被声明 console.log(c)
function test() { console.log(a) let a = 1 } test() // Cannot access 'a' before initialization 不能在初始化以前调用
cosnt a = 2 a = 3 //Assignment to constant variable 类型错误
const a //Missing initializer in const declaration 声明的时候缺乏初始化 a = 2
const实际上保证的,并非变量的值不得改动,而是变量指向的那个内存地址不得改动,对于简单类型的数据(数值,字符串,布尔值),值就保存在变量指向的那个内存地址,所以等同于常量。指针
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针指向的内存地址是固定的,至于它指向的内存地址中保存的数据结构是否是可变的,就彻底不能控制了。所以将一个对象声明为常量要当心。code
不用var,主用const,遇到可变的使用let对象