let、const、var的区别:
- var是ES5提出的,let和const是ES6提出的
- var不存在块级作用域;let和const存在块级作用域(红杏出墙)
- var声明的变量存在声明提升:变量可以在声明之前调用,值为undefined;(先上车后买票)
let和const不存在声明提升:所声明的变量一定要在声明后使用,否则报ReferenceError错 - var允许重复声明变量,后者覆盖前者;(套牌车)
let和const在同一作用域不允许重复定义同名变量 - var和let能够修改已申明的变量;
const声明一个只读的常量。一旦声明,常量的值就不能改变。const声明变量时必须赋初始值
for(var i = 1; i <= 5; i ++){
setTimeout(function timer(){
console.log(i);
}, i*1000)
}
for (let i = 1; i <= 5; i++) {
setTimeout(function timer() {
console.log(i);
}, i*1000)
}
for (var i = 1; i <= 5; i++) {
setTimeout(function timer(p) {
console.log(p);
}, i * 1000, i)
}
for (var i = 1; i <= 5; i++) {
(function (j) {
setTimeout(function timer() {
console.log(j);
}, i * 1000)
})(i)
}