// 不管是var,const或者let,新的let声明之前同名的变量,都会报错
var count = 30;
let count = 40;
// 报错 Identifier 'count' has already been declared
// 函数形参和函数内部的let声明变量重名,报错
function test(value) {
let value = 3;
}
test()
// 报错 Identifier 'value' has already been declared
// 在不同的作用域声明的变量重名是没问题的
let count = 30;
if(true) {
let count = 40;
// 不同的作用域,不会报错
}
if(true) {
console.log(typeof value);
// 报错 value is not defined
let value = 'blue';
}
// typeof 说是相对安全,确实是,永远拿不到想要的结果
console.log(typeof value); // 打印 undefined,没有报错
if(true) {
let value = 'red';
}
const number = 6;
number = 5;
// 报错 Assignment to constant variable
const obj = {number: 1};
obj.number = 2; // 不报错
obj = {number: 3};
// 报错 Assignment to constant variable
if(true) {
const number = 5;
}
console.log(number)
// 报错 number is not defined
var message = 'Hello';
let age = 25;
// 这两条语句都会报错
const message = 'Good';
const age = 30;
// 第一个对比
// before
for(var i = 0; i < 5; i++) {
// ... 省略一些代码
}
console.log(i) // 5
//after
for(let i = 0; i < 5; i++) {
// ... 省略一些代码
}
console.log(i) // 报错 i is not defined
// 第二个对比
// before
var funcs = [];
for(var i = 0; i < 10; i++) {
funcs.push(() => {console.log(i)})
}
funcs.forEach((ele) => {
ele()
})
// 打印 10次 10
// after
var funcs = [];
for(let i = 0; i < 10; i++) {
funcs.push(() => {console.log(i)})
}
funcs.forEach((ele) => {
ele()
})
// 打印 0 1 2 3 4 5 6 7 8 9
// for 循环会报错
for (const i = 0; i < 1; i++) {
console.log(i)
}
// 打印 0 ,然后报错 Assignment to constant variable.
// for-in 和 for-of 不会报错
var object = {
a: true,
b: true,
c: true
};
for (const key in object) {
// 不要在循环体内更改key的值,会报错
console.log(key)
}
// 打印 a b c
var a = 1;
window.a // 1
'use strict'
a = 5 // 会报错 Uncaught ReferenceError: a is not defined