JavaScript 中 let、const、var 的区别?

javascript 中 let、const、var 的区别?

在 javascript 中,let、const 和 var 用来声明变量,但它们在三个方面有所不同:

1.范围
2.重新分配
3.吊装

1.范围:

var 是一个函数作用域,意味着我们在函数内的任何位置访问 var 变量,如果我们尝试在函数外部访问它,它将显示错误 undefined
示例:-

function demo(){  if(true){    var n = 3;  }  console.log(n)}console.log(n) //referenceerror: n is not defineddemo();

let & const 是块意味着我们只能在范围内访问它们,否则会显示未定义的错误
示例:-

function demo(){  if(true){    let n = 3;    const m = 5;     console.log(n) // 3     console.log(m) // 5  }  console.log(n) //referenceerror: n is not defined  console.log(m) //referenceerror: n is not defined}console.log(n) //referenceerror: n is not definedconsole.log(m) //referenceerror: n is not defineddemo();

2.重新分配

var:可以在其范围内重新分配和重新声明。let:可以重新赋值,但不能在其范围内重新声明。const:不能重新分配或重新声明。变量本身是不可变的,但分配给 const 的对象和数组仍然可以修改.

3.吊装

var 被提升,这意味着它在声明之前就可以访问,但它的值将是未定义的,直到代码到达初始化变量的行。let 也被提升,但与 var 不同的是,由于“临时死区”,在声明之前无法访问它。用const声明的变量也会被提升,但必须在声明时初始化并且不能重新分配。但是,如果变量是对象或数组,则可以修改其内容(例如,在数组中添加或删除项目)。

// var exampleconsole.log(a); // undefined (due to hoisting)var a = 10;console.log(a); // 10// let exampleconsole.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 20;console.log(b); // 20// const exampleconst c = 30;c = 40; // TypeError: Assignment to constant variable

以上就是JavaScript 中 let、const、var 的区别?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:05:05
下一篇 2025年12月19日 13:05:19

相关推荐

  • 为 Reddit API 构建 Nodejs 包装器:分步指南

    为 reddit api 构建 node.js 包装器:分步指南 在现代开发中,api 包装是一项至关重要的技能。封装 api 允许开发人员创建更具可读性、可维护性和可扩展性的代码,最终提高开发效率。今天,我们将探索如何在 node.js 中构建一个简单而有效的包装器来与 reddit 的 api …

    2025年12月19日
    000
  • Let、Const 和 Var 概述:主要差异解释

    曾经有一段时间,我使用并理解了 javascript 中 let、const 和 var 的实际用法,但用语言解释它是具有挑战性的。如果您发现自己处于类似的困境,那么需要关注的关键点是范围、提升、重新初始化和重新分配方面的差异。 范围: 如果在任何函数外部声明,则 var 是函数作用域或全局作用域。…

    2025年12月19日
    000
  • 自动化云恢复挑战:使用 GitHub Actions 实施 CI/CD

    云简历挑战 – 第 2 部分 介绍 在本系列的第一部分中,我们逐步介绍了如何使用各种 aws 服务构建云原生简历网站。现在,我们将通过使用 github actions 实施持续集成和持续部署 (ci/cd),将我们的项目提升到一个新的水平。这种自动化对于有效维护和更新我们的云简历至关重…

    2025年12月19日
    000
  • 如何在 React 中创建可访问的图表:包容性数据可视化指南

    什么是数据可视化中的可访问性 数据可视化是沟通的关键,但残疾人可能无法使用。数据可视化的可访问性对于确保所有用户(无论能力如何)都能理解图表并与图表交互至关重要。 highcharts 拥有创建可访问图表的工具和功能,依赖屏幕阅读器的用户将受益于正确的标签和注释。 选择正确的图表类型 不同的图表类型…

    2025年12月19日
    000
  • 在 Fastly 上使用 AI 构建“为您”推荐!

    忘记炒作;人工智能在哪里创造真正的价值?让我们利用边缘计算来利用人工智能的力量,打造更智能、快速、安全、可靠的用户体验。 推荐无处不在,每个人都知道,使网络体验更加个性化可以使其更具吸引力和成功。 我的亚马逊主页知道我喜欢家居用品、厨具,现在还喜欢夏季服装: 如今,大多数平台都让您在快速或个性化之间…

    2025年12月19日 好文分享
    000
  • 理解 JavaScript 中的作用域链

    在 javascript 中,作用域链是一种定义变量解析在嵌套函数中如何工作的机制。它决定了引用变量时查找变量的顺序。 作用域链的工作原理是首先在局部作用域中查找变量,然后向上移动到外部(父)作用域,最后在必要时查找全局作用域。这个过程一直持续到找到变量或达到全局范围。 例子 let globalV…

    2025年12月19日
    000
  • 在 JavaScript 中实现 Ruby 的方法 Method

    突然觉得ruby的methods方法是不是很方便呢?编写代码时,它会列出对象可用的所有方法和属性,并允许您搜索它们,这对于调试非常有用。 除此之外,它对于检查 rails 等框架特有的方法也很有效,有助于代码阅读和理解库。虽然参考官方文档或源代码是一种很好的做法,但当您不需要深入研究或对方法名称有模…

    2025年12月19日
    000
  • 使用 Alpine JS 创建动态表

    本文探讨了使用轻量级 javascript 框架 alpine js 创建动态表。我们将把这个过程分为三个部分:页眉、正文和页脚,重点关注基本场景和复杂场景。 配置: html 结构: 我们从一个带有 x-data 指令的基本 html 元素 () 开始。该指令将反应数据绑定到元素。javascri…

    2025年12月19日
    000
  • ssential React Best Practices for Efficient Code and Lightning-Fast Web Apps in 4

    react 在 2024 年继续主导前端开发领域,使开发人员能够创建动态和响应式的 web 应用程序。无论您是 react 新手还是经验丰富的专业人士,掌握这七个最佳实践都将大大提高您的编码效率和应用程序性能。让我们潜入吧! 1. 智能组件结构:可重用性的关键 将你的 ui 分解成小的、可重用的组件…

    2025年12月19日
    000
  • C++如何测量程序运行时间_C++高精度计时器实现与性能分析

    使用 chrono 高精度时钟可准确测量 C++ 程序运行时间,推荐 std::chrono::high_resolution_clock 结合 duration_cast 获取微秒级耗时,注意关闭编译器优化、多次测量取平均值,并可用 RAII 封装自动计时,提升测试准确性与代码复用性。 在C++开…

    2025年12月19日
    000
  • c++中的RAII原则是什么_c++资源获取即初始化编程思想

    RAII通过将资源管理绑定到对象的构造和析构过程,确保资源在对象生命周期结束时自动释放。1. 构造函数中获取资源,析构函数中释放资源;2. 利用栈对象作用域结束自动调用析构函数的特性,实现异常安全的资源管理;3. 典型应用包括智能指针、文件流和锁的自动管理;4. 避免内存泄漏、文件句柄未关闭等问题,…

    2025年12月19日
    000
  • c++中的名字修饰(Name Mangling)是什么_c++链接与符号表原理解析【底层】

    c++kquote>C++需要名字修饰以解决函数重载、类作用域、命名空间和模板实例化导致的符号唯一性问题;编译器将语义信息编码进符号名,确保链接器能准确区分同名但语义不同的实体。 名字修饰(Name Mangling)是C++编译器为解决函数重载、类作用域、模板实例化等语言特性带来的符号唯一性…

    2025年12月19日
    000
  • C++中的std::scoped_lock怎么用?C++17多互斥锁安全管理【并发编程】

    std::scoped_lock是C++17引入的RAII工具,用于自动、安全地同时锁定多个互斥量,内置死锁规避机制,构造时加锁、析构时解锁,仅支持BasicLockable类型且不可拷贝或移动。 std::scoped_lock 是 C++17 引入的轻量级 RAII 工具,用来**自动、安全地同…

    2025年12月19日
    000
  • C++中的匿名命名空间有什么用?C++替代static全局变量的方法【代码组织】

    匿名命名空间用于实现文件作用域的内部链接,替代static全局变量/函数,支持类型定义且语义统一;它使符号仅在当前编译单元可见,避免命名冲突,但不可用于头文件。 匿名命名空间(anonymous namespace)在 C++ 中主要用来实现**文件作用域的内部链接(internal linkage…

    2025年12月19日
    000
  • C++怎么实现一个代理设计模式_C++结构型模式与Proxy Pattern应用

    代理模式通过引入代理类实现对真实对象的间接访问,控制其调用时机或权限。示例中ProxyImage在display时才加载RealImage,实现延迟初始化;不同代理类型包括远程、保护、日志代理等,C++中还可结合智能指针增强资源管理,符合开闭原则,适用于延迟加载、权限控制、远程调用等场景。 代理模式…

    2025年12月19日
    000
  • c++的#pragma once和#ifndef有什么区别 哪个更好用【工程实践】

    推荐优先使用#ifndef而非#pragma once,因其符合C/C++标准、可移植性强且能可靠处理硬链接等边界情况;#pragma once虽快但非标准,仅宜作为辅助手段。 #pragma once 和 #ifndef 都是用来防止头文件被重复包含的机制,但原理、兼容性和可靠性完全不同。在工程实…

    2025年12月19日
    000
  • c++如何实现单例模式 设计模式在c++中的应用【进阶必看】

    C++单例模式推荐使用C++11局部静态变量实现,线程安全且懒加载;需传参或控制销毁时机时用指针+双重检查锁;模板化CRTP基类可复用,但不支持参数构造;避免老式懒汉、饿汉及宏实现。 单例模式在 C++ 中的核心目标是:确保一个类只有一个实例,并提供全局访问点。关键难点在于线程安全、懒加载、析构时机…

    2025年12月19日
    000
  • c++如何实现一个简单的AOP框架_c++面向切面编程探索【架构】

    C++无法实现Java Spring式动态AOP,但可通过RAII、模板、宏和编译期技术实现零开销类AOP:1. RAII切面(如TimingAspect);2. 模板函数包装器;3. 宏辅助声明式语法;4. 编译期切面注册。 在C++中实现“真正意义”的AOP(如Java Spring那样动态织入…

    2025年12月19日
    000
  • c++的std::string_view是什么 零拷贝的字符串视图【性能优化】

    std::string_view是C++17引入的轻量只读字符串视图,仅持起始指针和长度,零拷贝、不拥有所指数据;适用于函数参数、切片等高频只读场景,但需确保底层内存生命周期长于view本身。 std::string_view 是 C++17 引入的一个轻量级、只读的字符串“视图”类型,它不拥有字符…

    2025年12月19日
    000
  • C++中的线程局部存储(thread_local)怎么用?C++多线程数据隔离【并发】

    thread_local是C++11引入的关键字,用于声明线程局部变量,每个线程拥有独立副本,实现天然数据隔离;可作用于全局、命名空间静态、类内静态(C++17起)及函数内静态变量,不支持函数参数或非静态成员。 thread_local 是 C++11 引入的关键字,用于声明线程局部变量——每个线程…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信