Open chenfan0 opened 2 years ago
// 打印5个5 for (var i = 0; i < 5; i++) { setTimeout(() => { console.log(i) }, i * 100); } // 打印0,1,2,3,4 for (let i = 0; i < 5; i++) { setTimeout(() => { console.log(i) }, i * 100); }
console.log(a) // undefined var a = 100
console.log(b) // 报错 ReferenceError: Cannot access 'b' before initialization let b = 100
- var声明的变量会被挂在全局对象上上,而let声明的变量不会。 ```js var a = 100 console.log(window.a) // 100 let b = 100 console.log(window.b) // undefined
var a var a = 100 let b let b = 100 // 报错 SyntaxError: Identifier 'b' has already been declared
let a = 100
if (true) { // 因为在该if块级作用域内,存在a的声明。所以在该作用域内,声明a之前都是访问不了a的。 console.log(a) // 报错 ReferenceError: Cannot access 'a' before initialization let a = 200 }
### let和const的区别: - let声明的变量可以被重新赋值,而const声明的变量不能被重新赋值。(注意:const声明的变量是不能被重新赋值,但是如果const声明的变量赋值为一个对象,那么是可以对这个对象的属性进行增删改查,但是不能重新赋值,也就是指针不能变) ```js let a = 100 a = 200 const b = 100 b = 200 // TypeError: Assignment to constant variable. const c = { name: 'aaa', age: 18 } c.name = 'bbb' c.id = 123 c = {} // TypeError: Assignment to constant variable.
let a const b // SyntaxError: Missing initializer in const declaration
let和var的区别:
console.log(b) // 报错 ReferenceError: Cannot access 'b' before initialization let b = 100
if (true) { // 因为在该if块级作用域内,存在a的声明。所以在该作用域内,声明a之前都是访问不了a的。 console.log(a) // 报错 ReferenceError: Cannot access 'a' before initialization let a = 200 }