// 报错:同一作用域内,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
}
效果
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
var tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = "hello world";
}
}
f(); // undefined
效果
PS C:\Users\Admin\Documents\node-learn> node
.\14.js
undefined
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
效果
PS C:\Users\Admin\Documents\node-learn> node
.\15.js
h
e
l
l
o
5