前端JavaScript篇之let、const、var的区别

目录


let、const、var的区别

let、const和var是JavaScript中用于声明变量的关键字,它们之间有一些区别。

首先,var是在ES5中引入的关键字,而let和const是在ES6中引入的。在ES6之前,我们只能使用var来声明变量。

var关键字存在一些特殊的行为,它具有函数作用域而不是块级作用域。这意味着使用var声明的变量在整个函数内部都是可见的,而不仅仅是在声明的块内部。

相比之下,let和const关键字引入了块级作用域。块级作用域是指变量仅在声明它们的块(通常是由花括号 {} 包裹的代码块)内部可见。这意味着使用let或const声明的变量只在当前块内有效,超出块的范围后就无法访问。

另一个区别是var关键字存在变量提升(hoisting)的行为,即变量可以在声明之前使用。这意味着我们可以在变量声明之前访问和使用它,但它的值会是undefined。而let和const不存在变量提升,如果在声明之前访问变量,会抛出一个引用错误。

此外,let和const还有一个重要的区别是它们的赋值和重新赋值行为。使用let声明的变量可以被重新赋值,而使用const声明的变量是常量,一旦赋值后就无法再修改。

下面是一个具体的案例,展示了let、const和var的区别:

javascript 复制代码
function example() {
  var x = 10
  let y = 20
  const z = 30

  if (true) {
    var x = 50
    let y = 60
    const z = 70
    console.log('Block scope:', x, y, z) // 输出:Block scope: 50 60 70
  }

  console.log('Function scope:', x, y, z) // 输出:Function scope: 50 20 30
}

example()

console.log('Global scope:', x) // 输出:ReferenceError: x is not defined

在上述代码中,我们定义了一个函数example,内部使用var、let和const声明了变量x、y和z。

在函数的块级作用域内部,我们通过var重新赋值了变量x,并使用let和const声明了新的变量y和z。在块级作用域内部,x的值被修改为50,y和z分别是60和70。

在函数的函数作用域内部,我们输出了变量x、y和z的值。由于var具有函数作用域,块级作用域内的x的赋值影响了函数作用域内的x,因此输出了50。而let和const的作用域仅限于块级作用域,所以函数作用域内的y的值保持为20,z的值保持为30。

最后,在全局作用域中访问变量x时,由于x是在函数作用域内部声明的,因此会抛出一个引用错误。

区别 var let const
块级作用域 × ✔️ ✔️
变量提升 ✔️ × ×
全局属性 ✔️ × ×
重复声明变量 ✔️ × ×
暂时性死区 × ✔️ ✔️
初始值设置 × × ✔️
指针指向 ✔️ ✔️ ×

总结来说,let、const和var之间的主要区别在于作用域和赋值行为。let和const引入了块级作用域,并且const声明的变量是常量不可修改,而var具有函数作用域和变量提升的特性。

持续学习总结记录中,回顾一下上面的内容:
let、const和var之间的主要区别在于作用域和赋值行为。let和const引入了块级作用域,并且const声明的变量是常量不可修改,而var具有函数作用域和变量提升的特性。

相关推荐
layman052812 分钟前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔13 分钟前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李14 分钟前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN16 分钟前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒17 分钟前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
m0_7487080519 分钟前
C++中的观察者模式实战
开发语言·c++·算法
PHP武器库20 分钟前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
方也_arkling26 分钟前
Element Plus主题色定制
javascript·sass
电商API_1800790524729 分钟前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
晓晓莺歌30 分钟前
vue3某一个路由切换,导致所有路由页面均变成空白页
前端·vue.js