es6 基础学习之var let 和 const 命令 区别和相关

在 ES6(ECMAScript 2015)中,varletconst 是用于声明变量的三种方式,它们有几个关键的区别。

1. 作用域

  • var: 声明的变量会被提升到其函数或全局作用域的顶部。
  • letconst: 声明的变量仅在其块级作用域(block scope)内有效。

示例:

javascript 复制代码
function demoVar() {
  if (true) {
    var x = 1; // x 可以在整个函数作用域内访问
  }
  console.log(x); // 输出 1
}

function demoLet() {
  if (true) {
    let y = 1; // y 仅在这个块级作用域内有效
  }
  console.log(y); // ReferenceError: y is not defined
}

2. 重复声明

  • var: 允许重复声明同一个变量。
  • letconst: 不允许在同一个作用域内重复声明同一个变量。

示例:

javascript 复制代码
var x = 1;
var x = 2; // 有效

let y = 1;
let y = 2; // SyntaxError: Identifier 'y' has already been declared

const z = 1;
const z = 2; // SyntaxError: Identifier 'z' has already been declared

3. 可变性

  • varlet: 声明的变量可以重新赋值。
  • const: 声明的变量不能重新赋值,但如果它是一个对象或数组,其内部状态是可以被改变的。

示例:

javascript 复制代码
var x = 1;
x = 2; // 有效

let y = 1;
y = 2; // 有效

const z = 1;
z = 2; // TypeError: Assignment to constant variable.

const obj = { prop: 1 };
obj.prop = 2; // 有效

4. 提升(Hoisting)

  • var: 变量会被提升,但只有声明会被提升,初始化(如果有)则不会。
  • letconst: 声明不会被提升,访问变量前必须声明。

示例:

javascript 复制代码
console.log(a); // 输出 undefined
var a = 1;

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 1;

console.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 1;

这些是 varletconst 的主要区别。在现代 JavaScript 开发中,通常推荐使用 letconst,因为它们提供了块级作用域和不可变性,这有助于编写更清晰、更易维护的代码。

相关推荐
2301_32241428042 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
专业程序开发源4 小时前
springbootLivehouse票务系统-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·pygame
leoZ2314 小时前
2026-09-10-静态扫描连错三次-用运行环境当裁判
前端·javascript·vue.js·人工智能·opencv·机器学习·数据挖掘
卓怡学长4 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
梨涡泥窝6 小时前
JavaWeb——基于 Spring Boot + Vue 的图书管理系统的设计与实现
vue.js·spring boot·后端
huali8 小时前
vue-split-screen:让 Vue Router 的导航轨迹变成两个页面
前端·javascript·vue.js
雪芽蓝域zzs10 小时前
第三十六节:keep-alive 页面缓存(Vue3 + 后台管理系统)
前端·vue.js·缓存
边境悍匪10 小时前
蜗牛学苑 Java 智能体学习 Day41|ElementPlus 布局、Vue‑Router 登录、Axios 思维导图复盘
java·vue.js·学习
志尊宝10 小时前
Vue3 零基础每日笔记(017):事件处理进阶——$event、多事件与事件修饰符全家桶
javascript·vue.js·笔记
Bs_MoneyMagnet21 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring