JavaScript学习笔记(九) var、let、const

简介: JavaScript学习笔记(九) var、let、const

前言


var、let、const 都是 JavaScript 中声明变量的方式,其中 let、const 是在 ES6/ES2015 中新引入的

它们之间究竟有什么异同呢?下面让我们一起来探讨一下


正文


1、作用域


使用 var 声明的变量具有函数作用域

如果变量是在函数内声明的,那么这个变量在这个函数内可用

如果变量是在函数外声明的,那么这个变量就会成为全局变量,在全局环境中可用

并且在浏览器环境中将会挂载在 window 对象下,而在 Node 环境中将会挂载在 global 对象下

var a = 0
function func() {
    for (var i = 1; i <= 5; i++) { a = a + 1 }
    console.log('a inside the function: ' + a)
    console.log('i inside the function: ' + i)
}
func()
console.log('a outside the function: ' + a)
// console.log('i outside the function: ' + i) -> i is not defined
/*
 * 执行结果:
 * a inside the function: 5
 * i inside the function: 6
 * a outside the function: 5
**/

使用 let 和 const 声明的变量具有块作用域

  • 如果变量是在块内声明,那么仅在块内可用
  • 如果变量是在块外声明,那么这个变量也会成为全局变量,在全局环境中可用,但是不会挂载
let a = 0
function func() {
    for (let i = 1; i <= 5; i++) { a = a + 1 }
    console.log('a inside the function: ' + a)
    // console.log('i inside the function: ' + i) -> i is not defined
}
func()
console.log('a outside the function: ' + a)
// console.log('i outside the function: ' + i) -> i is not defined
/*
 * 执行结果:
 * a inside the function: 5
 * a outside the function: 5
**/


补充一点,如果在声明变量的时候没有使用关键字(var、let、const),无论位置如何,都会成为全局变量

function declare() {
    a = 'Hello'
}
function use() {
    console.log(a)
}
declare()
use()
/*
 * 执行结果:
 * Hello
**/


2、变量提升


使用 var 声明的变量会将声明提前(注意赋值不会一起提前),但是使用 let 和 const 声明的变量不会

console.log(a)
var a = 1
console.log(b)
let b = 1
/*
 * 执行结果:
 * undefined
 * Uncaught ReferenceError: a is not defined
**/



3、同名变量


使用 var 声明的变量可以多次声明,但是使用 let 和 const 声明的变量不能

var a = 0
var a = 1
let b = 0
let b = 1
/*
 * 执行结果:
 * Uncaught SyntaxError: Identifier 'b' has already been declared
**/



4、只读引用


从上面的三组对比可以发现,let 和 const 具有一样的特点,那么它们之间又有什么区别呢?

事实上,除了它们共有的特点外,const 还具有以下两个特点:

一旦声明,必须赋值

一旦声明,不能修改

// const a -> Uncaught SyntaxError: Missing initializer in const declaration
const a = 0
// a = 1 -> Uncaught TypeError: Assignment to constant variable.

注意哦,这里所说的不能修改,并不是说变量的值不可修改,而是变量的标识符不能重新分配

准确而言,const 声明的变量是一个值的只读引用,它意味着栈空间的地址不可修改,而非堆空间中的值不可修改

因此对于引用类型,我们还是可以修改它的值的

const a = [1, 3, 5]
a[0] = 2 // 修改其值
console.log(a)
/*
 * 执行结果:
 * (3) [2, 3, 5]
**/


目录
相关文章
|
7天前
|
JavaScript 前端开发 安全
【JavaScript】深入理解 let、var 和 const
掌握这些关键字的使用可以提高代码的可读性和可维护性,避免潜在的变量提升和作用域问题。希望本文能帮助您更好地理解和应用 JavaScript 中的变量声明方式,编写出更高质量的代码。
48 20
|
3月前
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
46 5
|
4月前
|
JavaScript 前端开发
【JavaScript】let,const和var的区别
总的来说,随着ECMAScript 6(ES6)及后续版本的推广,`let`和 `const`因其增强的块级作用域和对变量行为的更严格控制,逐渐成为现代JavaScript编码实践中推荐使用的变量声明方式。而 `var`由于其历史遗留的局限性,正逐渐被边缘化,但在维护老代码或处理特定兼容性需求时仍需了解。
64 3
|
4月前
|
JavaScript 前端开发 安全
JS中const有没有变量提升
JS中const有没有变量提升
32 0
|
4月前
|
JavaScript 前端开发
【干货分享】JavaScript学习笔记分享
【干货分享】JavaScript学习笔记分享
73 0
|
3月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
49 1
JavaScript中的原型 保姆级文章一文搞懂
|
7月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
138 2
|
3月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
33 0
|
7月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
195 4
|
7月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
107 4

热门文章

最新文章