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

ES6语法学习day3之let第三关

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

不允许重复声明

// 报错:同一作用域内,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


相关文章

社交的

bilibiliemailYouTube