一.let进阶
(1).闭包的问题
var arr = [];
for(let i = 0; i< 10 i++){
arr[i] = function(){
console.log(i)
}
}
for(var k = 0; k <10; k++){
arr[k]();
}
//输出0-9
因为此处let有独立的作用域,循环结束后带出了let的10个作用域,所以输出0-9
(2).let补充
{
let a = 0;
function a(){}
}
二.const
const a;
console.log(a); //会报错
const a = 12;
a=10;
const a =12;
var a =10;
const obj = {}
obj.name = 'zhangsan';
//这样是可以更改的,因为堆和栈的原因
所以可以总结 const obj={}与var obj={}
const obj = [];
Object.freeze(obj);
obj[2] = 'zhangsan';//无效
//循环冻结
function myFreeze(obj){
Object.freeze(obj);
for(var key in obj){
if(typeof(obj[key]==='object')&& obj[key]!==null){
Object.freeze(obj[key]);
}
}
}