一:var声明的变量
全局作用域、局部作用域
var a = 1; //a为全局变量,可以在任何地方使用
for(var i = 0; i < 3; i++){ //i 为全局变量
function ff(){
var b = "b" //b为局部遍历,只能在ff中使用
}
}
console.log(a,b,i) //结果为:1、报错(not defined)、4
二:let声明的变量
一:let声明的变量只在let命令所在的代码块内有效。如下面for循环中 i 就只在for循环中有效
二:不存在变量提升
三:不存在变量提升(使用的变量必须先声明)
四:let不允许在相同作用域内,重复声明同一个变量。(下面的for是个例外)
for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
let a = 1; //a为全局变量,可以在任何地方使用
for(let i = 0; i < 3; i++){ //i 为全局变量
function ff(){
let b = "b" //b为局部遍历,只能在ff中使用
}
}
console.log(a,b,i) //结果为:1、报错(not defined)、报错
for(var i = 0; i < 3; i++){
i = "a" // 即 var i = "a" i 作为全局变量,被赋值 a 所以循环只走了一次 就结束了
console.log(i) //打印一次 “a”
}
for(let i = 0; i < 3; i++){
i = "a" // i 作为for代码块的局部变量,被赋值 a, 所以循环只走了一次 就结束了
console.log(i) //打印一次 “a”
// 若改为下面的
let a = "a"
console.log(a) //打印 3 次 “a”
}