ES6 了解之var、let和const声明

it2022-05-09  33

基本使用方式

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 声明变量, 该变量会绑到windowlet 声明变量, 该变量不会绑到window上

转载于:https://www.cnblogs.com/hchiu/p/7928793.html


最新回复(0)