1.var 定义的变量是函数作用域(作用域只能跟函数的{}有关系)
let 定义的变量是块级作用域(只要是{}就会形成作用域)
2.let区分作用域:
for(let index=0;index<5;index++){
setTimeout(function(){
console.log(index)
},1000)
}
for循环 生成了五个块级作用域,跟闭包一样,区分开了作用域
闭包区分作用域:
for(var i=0;i<5;i++){
(function(n){
setTimeout(function(){
console.log(n)
},1000)
})(i)
}
for循环 循环5次 执行了五次匿名函数 生成了五个函数作用域
3.let变量的特点
1.let定义的是块级作用域
2.let定义的变量不能重复声明
3.let定义的变量没有声明提升
4.let定义的全局变量不能作为顶层属性来用(不能写成window.xx)
let定义的变量 生成的块级作用域也有作用域链 跟 函数作用域链一样
4.const
const也是块级作用域
const定义的是常量 也就是一旦定义就不能改变它的值
const只要声明了就要赋值
5.解构赋值
赋值运算(=)的扩展 是数组和对象的模式匹配
就是把数组和对象结垢成变量
1.数组解构:
解构赋值分为两部分 等式左边叫结构目标 右边叫解构源