ES6 了解之var、let和const声明
基本使用方式
- let声明的变量只有在块级作用域内有效, 以外就会报not defined异常.
![]()
应用场景
1. 在for循环中使用let和var的声明
场景一:
for (let i = 0; i < 10; i++) {
}
console.log("外i:"+i);
场景一输出结果:
Uncaught ReferenceError: i is not defined
at <anonymous>:6:20
场景二:
for (let i = 0; i < 10; i++) {
console.log("内i:"+i);
}
console.log("外i:"+i);
场景二输出结果:
内i:0
内i:1
内i:2
内i:3
内i:4
内i:5
内i:6
内i:7
内i:8
内i:9
Uncaught ReferenceError: i is not defined
at <anonymous>:6:20
场景三:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log("内i:"+i);
}
}
a[6]();
console.log("外i:"+i);
场景三输出结果:
内i:6
Uncaught ReferenceError: i is not defined
at <anonymous>:8:19
场景四:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log("内i:"+i);
}
}
a[6]();
console.log("外i:"+i);
场景四输出结果:
内i:10
外i:10
场景五:
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
场景五输出结果:
abc
abc
abc
场景六:
for (var i = 0; i < 3; i++) {
var i = 'abc';
console.log(i);
}
场景六输出结果:
abc
以上充分证明了:
- 在循环体中, 如果用let声明同个变量名, 那么会有多个独立作用域的;
- 在循环体中, 如果用var声明同一个变量, 后声明的变量会覆盖前面的, 只会存在一个作用域.
2. 未声明, 直接调用时
场景一:
console.log(f);
var f = 2;
场景一输出结果:
undefined (有此变量, 只不过其变量值默认为undefined, 此现象称为: var 变量提升)
场景二:
console.log(fd);
let fd = 2;
场景二输出结果:
Uncaught ReferenceError: fd is not defined (let 直接报未定义异常)
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
console.log("tmp1:"+tmp);
let tmp;
//console.log("tmp2:"+tmp);
}
⚠️注意点
- var 声明变量, 该变量会绑到window
- let 声明变量, 该变量不会绑到window上


浙公网安备 33010602011771号