一、核心声明语法基础用法1. var 声明ES5 语法不推荐语法var 变量名 赋值;赋值可选未赋值则为undefined支持无赋值声明、重复声明、重新赋值作用域为「函数 / 全局作用域」无块级作用域。javascript运行// 1. 仅声明未赋值 var a; console.log(a); // undefined // 2. 声明并赋值 var b 10; console.log(b); // 10 // 3. 重复声明允许 var b 20; console.log(b); // 20 // 4. 重新赋值 b 30; console.log(b); // 30 // 5. 无块级作用域if/for 块内声明会泄露到外部 if (true) { var c 5; } console.log(c); // 52. let 声明ES6 推荐可变变量语法let 变量名 赋值;赋值可选未赋值则为undefined不支持重复声明支持重新赋值作用域为「块级作用域」{}内存在暂时性死区。javascript运行// 1. 仅声明未赋值 let d; console.log(d); // undefined // 2. 声明并赋值 let e 20; console.log(e); // 20 // 3. 重新赋值允许 e 40; console.log(e); // 40 // 4. 重复声明报错 // let e 50; // Uncaught SyntaxError: Identifier e has already been declared // 5. 块级作用域外部无法访问 if (true) { let f 8; } // console.log(f); // Uncaught ReferenceError: f is not defined // 6. 暂时性死区声明前访问报错 // console.log(g); // Uncaught ReferenceError: Cannot access g before initialization let g 100;3. const 声明ES6 推荐常量 / 不可变引用语法const 变量名 赋值;赋值必须不可省略不支持重复声明、重新赋值作用域为「块级作用域」存在暂时性死区注意引用类型对象 / 数组仅禁止修改地址内部属性 / 元素可改。javascript运行// 1. 声明并赋值必须赋值否则报错 const h 30; console.log(h); // 30 // 2. 重新赋值报错 // h 60; // Uncaught TypeError: Assignment to constant variable. // 3. 重复声明报错 // const h 90; // Uncaught SyntaxError: Identifier h has already been declared // 4. 块级作用域 if (true) { const i 15; } // console.log(i); // Uncaught ReferenceError: i is not defined // 5. 引用类型对象/数组地址不可改内部可改 const obj { name: 张三 }; obj.name 李四; // 允许修改属性 console.log(obj); // { name: 李四 } const arr [1, 2, 3]; arr.push(4); // 允许修改元素 console.log(arr); // [1, 2, 3, 4] // arr [5,6]; // 报错修改地址二、关键使用规则避坑重点赋值规则var/let 可 “先声明后赋值”const 必须 “声明即赋值”仅 const 禁止重新赋值var/let 无此限制。作用域规则var 无块级作用域let/const 受{}限制if/for/ 函数块均生效全局作用域中var 声明会挂载到windowlet/const 不会。重复声明同一作用域内var 允许重复声明let/const 禁止。三、实战推荐写法javascript运行// 1. 常量/无需修改的变量 → 用 const const PI 3.14159; const userList [张三, 李四]; // 数组地址不变内部可改 // 2. 需要修改的变量 → 用 let let count 0; count 1; // 重新赋值 // 3. 循环变量 → 用 let避免var的作用域泄露 for (let j 0; j 3; j) { console.log(j); // 0,1,2 } // console.log(j); // 报错j 仅在循环块内有效 // 4. 禁止使用 var → 避免作用域混乱总结varvar 变量名 值函数 / 全局作用域允许重复声明 / 重新赋值不推荐使用letlet 变量名 值块级作用域禁止重复声明、允许重新赋值推荐用于可变变量constconst 变量名 值块级作用域禁止重复声明 / 重新赋值推荐用于常量 / 引用类型。
如何在 JavaScript 中使用 var、let、const 声明变量?
一、核心声明语法基础用法1. var 声明ES5 语法不推荐语法var 变量名 赋值;赋值可选未赋值则为undefined支持无赋值声明、重复声明、重新赋值作用域为「函数 / 全局作用域」无块级作用域。javascript运行// 1. 仅声明未赋值 var a; console.log(a); // undefined // 2. 声明并赋值 var b 10; console.log(b); // 10 // 3. 重复声明允许 var b 20; console.log(b); // 20 // 4. 重新赋值 b 30; console.log(b); // 30 // 5. 无块级作用域if/for 块内声明会泄露到外部 if (true) { var c 5; } console.log(c); // 52. let 声明ES6 推荐可变变量语法let 变量名 赋值;赋值可选未赋值则为undefined不支持重复声明支持重新赋值作用域为「块级作用域」{}内存在暂时性死区。javascript运行// 1. 仅声明未赋值 let d; console.log(d); // undefined // 2. 声明并赋值 let e 20; console.log(e); // 20 // 3. 重新赋值允许 e 40; console.log(e); // 40 // 4. 重复声明报错 // let e 50; // Uncaught SyntaxError: Identifier e has already been declared // 5. 块级作用域外部无法访问 if (true) { let f 8; } // console.log(f); // Uncaught ReferenceError: f is not defined // 6. 暂时性死区声明前访问报错 // console.log(g); // Uncaught ReferenceError: Cannot access g before initialization let g 100;3. const 声明ES6 推荐常量 / 不可变引用语法const 变量名 赋值;赋值必须不可省略不支持重复声明、重新赋值作用域为「块级作用域」存在暂时性死区注意引用类型对象 / 数组仅禁止修改地址内部属性 / 元素可改。javascript运行// 1. 声明并赋值必须赋值否则报错 const h 30; console.log(h); // 30 // 2. 重新赋值报错 // h 60; // Uncaught TypeError: Assignment to constant variable. // 3. 重复声明报错 // const h 90; // Uncaught SyntaxError: Identifier h has already been declared // 4. 块级作用域 if (true) { const i 15; } // console.log(i); // Uncaught ReferenceError: i is not defined // 5. 引用类型对象/数组地址不可改内部可改 const obj { name: 张三 }; obj.name 李四; // 允许修改属性 console.log(obj); // { name: 李四 } const arr [1, 2, 3]; arr.push(4); // 允许修改元素 console.log(arr); // [1, 2, 3, 4] // arr [5,6]; // 报错修改地址二、关键使用规则避坑重点赋值规则var/let 可 “先声明后赋值”const 必须 “声明即赋值”仅 const 禁止重新赋值var/let 无此限制。作用域规则var 无块级作用域let/const 受{}限制if/for/ 函数块均生效全局作用域中var 声明会挂载到windowlet/const 不会。重复声明同一作用域内var 允许重复声明let/const 禁止。三、实战推荐写法javascript运行// 1. 常量/无需修改的变量 → 用 const const PI 3.14159; const userList [张三, 李四]; // 数组地址不变内部可改 // 2. 需要修改的变量 → 用 let let count 0; count 1; // 重新赋值 // 3. 循环变量 → 用 let避免var的作用域泄露 for (let j 0; j 3; j) { console.log(j); // 0,1,2 } // console.log(j); // 报错j 仅在循环块内有效 // 4. 禁止使用 var → 避免作用域混乱总结varvar 变量名 值函数 / 全局作用域允许重复声明 / 重新赋值不推荐使用letlet 变量名 值块级作用域禁止重复声明、允许重新赋值推荐用于可变变量constconst 变量名 值块级作用域禁止重复声明 / 重新赋值推荐用于常量 / 引用类型。