一、变量
代码块内有效,无变量提升、不可重复声明
{ let a = 2; }
for循环非常实用let。
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 这个 var 在全局内有效,而setTimeout 中的 i 指向的是全局的 i;
// 输出十个 10
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 变量 j 是用 let 声明的,当前的 j 只在本轮循环中有效,每次循环的 j 其实都是一个新的变量; javaScript引擎会记住前一个循环的值。
// 输出 0123456789
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。
const foo = {}; // 为 foo 添加一个属性,可以成功 foo.prop = 123; foo.prop // 123 // 将 foo 指向另一个对象,就会报错 foo = {}; // TypeError: "foo" is read-only
原文:https://www.cnblogs.com/anbozhu7/p/11814289.html