首页 > 编程语言 >3. JavaScript 变量声明

3. JavaScript 变量声明

时间:2024-08-28 10:53:24浏览次数:5  
标签:const 变量 JavaScript let var 声明 赋值

varletconst 是 JavaScript 中用于声明变量的关键字,但它们在作用域、提升(hoisting)、以及是否可以重新赋值等方面存在一些重要的区别。

1. 作用域(Scope)

  • var

    • 具有函数作用域(function scope),即如果在函数内部声明 var 变量,该变量在整个函数内都有效。
    • 如果在函数外部声明,则具有全局作用域。
    • 不具有块级作用域(block scope),在 iffor 等块级结构内部声明的 var 变量,在块外也能访问。
  • letconst

    • 具有块级作用域,即在 {} 内声明的变量只能在这对大括号内访问。常见的块级结构包括 ifforwhile 等。
    • 这两个关键字在块外无法访问在块内声明的变量。
if (true) {
    var x = 10;
    let y = 20;
    const z = 30;
}
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined
console.log(z); // ReferenceError: z is not defined

2. 提升(Hoisting)

  • var

    • 变量声明会被提升到作用域的顶部,但不会提升赋值操作。也就是说,可以在声明之前使用,但会得到 undefined
  • letconst

    • 变量声明也会被提升,但在变量声明之前访问会导致 ReferenceError,这种现象称为“暂时性死区”(Temporal Dead Zone, TDZ)。
console.log(a); // undefined
var a = 5;

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

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

3. 重新赋值(Reassignment)

  • var

    • 可以被重新赋值,也可以重复声明同一个变量。
  • let

    • 可以被重新赋值,但不能重复声明同一个变量。
  • const

    • 不能被重新赋值,声明时必须赋值,且值是不可变的(对于基本数据类型)。对于对象和数组等复杂数据类型,引用是不可变的,但对象或数组的内容可以更改。
var a = 10;
var a = 20; // 允许重新声明和赋值

let b = 10;
b = 20; // 允许重新赋值
// let b = 30; // SyntaxError: Identifier 'b' has already been declared

const c = 10;
// c = 20; // TypeError: Assignment to constant variable.

4. 最佳实践

  • 使用 letconst 代替 var 是现代 JavaScript 开发的最佳实践。const 应用于不会重新赋值的变量,let 用于可能会重新赋值的变量。
  • 使用 const 可以让代码更安全,因为它可以防止意外的重新赋值操作。

标签:const,变量,JavaScript,let,var,声明,赋值
From: https://www.cnblogs.com/muling-blog/p/18384164

相关文章

  • JavaScript 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)
              在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1​(x1​,y1​) 和 P2​(x2​,y2​),我们想要找到通过这两个点的直线方程。直线方程的形式直线的方程通常表示为 y=mx+b,其中 m 是斜率,b 是 y 轴截距。计算斜率......
  • 声明式开发(N个中间件硬解析)
    我刚入行的时候,就看到第一篇文章概述里那种描述,就觉得编程好难啊,要学那么多东西.光是技术的名字都那么一长串,b站上看那些大佬跟相声说贯口似的说着那些技术名字.要理解各种中间件,第一步,我们得破除一个恐惧,就是技术那么多,怎么学得完的恐惧.怎么破.我的角度是一个词: ......
  • JavaScript 对象构造器
    <!DOCTYPEhtml><htmllang="en"><body><pid="demo"></p><script>functionPerson(first,last,age,like){this.firstName=first;this.lastName=last;......
  • 引用变量
    在C++PrimerPlus中,最开始介绍的是变量和引用变量。变量实际就包含了左值类型的变量和右值类型的变量。引用变量引用是C++引入的概念,引用变量是已定义的变量的别名(alias)。引用的创建示例如下:inta=10;int&b=a;引用在定义时必须初始化,这点和const限定的变量很像,为什么......
  • 【Linux入门】shell基础篇——变量与运算
    文章目录shell中的变量概述变量的作用Shell变量名与变量值变量名变量值变量的作用范围局部变量(LocalVariables)全局变量(GlobalVariables)注意变量的类型1.环境变量(EnvironmentVariables)2.位置变量(PositionalVariables)3.预定义变量(PredefinedVariables)补充:自定......
  • JavaScript简介
    一、JavaScript简介1.什么是JavaScript?JavaScript简称为JS,由网景公司开发的客户端脚本语言,不需要编译,可以直接运行Web前端三层:结构层 HTML 定义页面的结构样式层 CSS 定义页面的样式行为层 JavaScript 用来实现交互,提升用户体验2.JavaScript作用在客户端动......
  • nuxt3项目自定义环境变量,typescript全局提示
    最近使用nuxt3框架来写项目,其中有一点就是typescript语法提示让人闹心,使用vscode编辑器,如果有语法提示进行编码,工作效率可以提升一个档次。本篇文章说的就是如何在vscode中使用nuxt3框架,自定义环境变量,支持typescript语法提示。列出当前使用的环境版本node#21.4.0......
  • JavaScript 的事件循环、宏任务、微任务
    JavaScrtipt执行顺序首先,必须要明确,在JavaScript中,所有任务都在主线程上执行。任务执行过程分为同步任务和异步任务两个阶段。异步任务的处理经历两个主要阶段:EventTable(事件表)和EventQueue(事件队列)。EventTable存储了宏任务的相关信息,包括事件监听和相应的回调函数。当特定......
  • Nuxt3 全局变量接口前缀全局配置,全局方法,全局状态管理
    接口前缀全局配置,全局变量1.像api前缀这类的全局变量一般配置在nuxt.config.ts文件中。如下:nuxt.config.ts可以在public下定义全局变量,且public下的变量可以在客户端和服务端使用在其他任意vue或者js、ts文件中,可通过以下方式获取变量const{public:{apiBase}}=u......
  • javascript怎么实现链表?
    在JavaScript中实现链表通常涉及定义一个链表节点类(通常称为ListNode)和一个链表类(例如LinkedList),然后在这个链表类中实现各种操作链表的方法,如添加节点、删除节点、遍历链表等。以下是使用JavaScript实现单向链表的一个基本示例:链表节点类(ListNode)首先,我们定义一个链表节点......