你已处于离线状态,显示的是缓存的页面内容

ES6语法学习day3之let第三关

时间:2026-07-05   标签: 分享, ES6, 语法,

不允许重复声明

1
2
3
4
5
6
7
8
9
10
11
// 报错:同一作用域内,let 声明的变量 a 与 var 声明的 a 冲突(var 会提升,let 禁止重复声明)
function func() {
let a = 10; // let 声明块级变量 a
var a = 1; // var 试图重复声明同一变量名,触发 SyntaxError
}

// 报错:同一作用域内,let 不允许重复声明同名变量
function func() {
let a = 10; // 第一次 let 声明 a
let a = 1; // 第二次 let 声明同名 a,触发 SyntaxError
}

效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS C:\Users\Admin\Documents\node-learn> node
.\12.js
C:\Users\Admin\Documents\node-learn\12.js:4
var a = 1;
^

SyntaxError: Identifier 'a' has already been declared
at wrapSafe (node:internal/modules/cjs/loader:1743:18)
at Module._compile (node:internal/modules/cjs/loader:1786:20)
at Object..js (node:internal/modules/cjs/loader:1943:10)
at Module.load (node:internal/modules/cjs/loader:1533:32)
at Module._load (node:internal/modules/cjs/loader:1335:12)
at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
at node:internal/main/run_main_module:33:47

Node.js v24.14.1

块级作用域

内层变量可能会覆盖外层变量

1
2
3
4
5
6
7
8
9
10
var tmp = new Date();

function f() {
console.log(tmp);
if (false) {
var tmp = "hello world";
}
}

f(); // undefined

效果

1
2
3
PS C:\Users\Admin\Documents\node-learn> node
.\14.js
undefined

用来计数的循环变量泄露为全局变量

1
2
3
4
5
6
7
8
var s = "hello"; // 声明全局变量 s,值为字符串 'hello',长度为 5

for (var i = 0; i < s.length; i++) {
// 使用 var 声明循环变量 i,var 不具备块级作用域,i 绑定在全局作用域中
console.log(s[i]); // 循环体执行 5 次,依次打印 'h', 'e', 'l', 'l', 'o'
} // 当 i 自增到 5 时,条件 5 < 5 为 false,循环结束

console.log(i); // 循环结束后 i 的值为 5,且因 var 不会形成块级作用域,i 在全局可访问,所以输出 5

效果

1
2
3
4
5
6
7
8
PS C:\Users\Admin\Documents\node-learn> node
.\15.js
h
e
l
l
o
5


社交的

bilibiliemailYouTube