var可重复 let const不可重复
var a = 1
var a = 2
console.log(a); //2
let b = 1
let b = 2
console.log(b); //报错
const c = 1
const c = 2
console.log(c); //报错 Identifier 'c' has already been declared(标识符“c”已声明)
作用域 var 全局作用域 let是块级作用域所有外面的语句块访问不到
“同一作用域下变量存在 再let会报错”
function zuoyongy(status){
var test1 = '1'
let test1 = '1'
}
console.log(zuoyongy(s)); //报错 Uncaught SyntaxError: Identifier 'test1' has already been declared
全局作用域会挂载到window对象上
var value1 = "张三"
let value2 = "李四"
const value3 = "王五"
console.log(window.value1) // 张三
console.log(window.value2) // undefined
console.log(window.value3) // undefined
var 有变量提升 let是没有变量提升的
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(new Date, i);
}, 1000);
}
console.log(new Date,i);
// 输出5 5 5 5 5 5
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(new Date, i);
}, 1000);
}
console.log(new Date,i);
// 输出0 1 2 3 4