变量与变量提升【JavaScript】

 一、变量

         在 JavaScript 中,变量 是用于存储数据的容器。你可以使用变量来保存和操作各种类型的数据。其中,声明变量变量初始化变量赋值是三个相关但不同的概念。下面是它们之间的区别与联系:

1. 变量声明

        变量声明是定义变量的过程。它告诉 JavaScript 引擎你要创建一个变量,并指定该变量的名称。声明变量并不会立即赋值,只是创建了一个变量的“占位符”。

  • 使用 varlet 或 const 来声明变量:

    var x;
    let y;
    const z; // 注意:`const` 变量必须在声明时初始化
    

注意:const 变量必须在声明时初始化 

 

2. 变量初始化

        变量初始化是给变量分配一个初始值的过程。初始化通常发生在声明变量时,也可以在之后的某个时刻进行。初始化是声明的一个扩展步骤。

  • 在声明时初始化变量:

    var a = 10; // 声明并初始化
    let b = "hello"; // 声明并初始化
    const c = true; // 声明并初始化,`const` 变量必须初始化
    

3. 变量赋值

        变量赋值是将一个值存储到已经声明的变量中。如果变量已经被声明但未初始化,可以在之后通过赋值来设置它的值。赋值可以发生在变量声明之后的任意时间点。

  • 声明后赋值:

    var d; // 声明
    d = 25; // 赋值let e; // 声明
    e = "world"; // 赋值// 对于 `const` 变量,声明时必须初始化,不能单独赋值
    // const f; // 会报错
    // f = 30; // 也会报错
    

联系:

  • 声明与初始化: 在声明变量时可以选择是否初始化。如果在声明时不进行初始化,变量的值将是 undefined,直到你显式地赋值。

    var g; // 声明
    console.log(g); // 输出 undefined,因为未初始化g = 15; // 赋值
    console.log(g); // 输出 15
    
  • 赋值与初始化: 初始化是赋值的一种形式,但赋值不仅仅限于初始化。初始化是在声明时完成的赋值,而一般的赋值是在变量声明之后进行的。

    var h = 5; // 初始化(也是赋值)
    h = 10; // 赋值
    

总结:

声明是创建变量的过程,不包含具体值。
初始化 是在声明时给变量赋一个初始值。
赋值是将一个新值存储到变量中的过程,可能发生在声明后或初始化之后。

 

二、变量提升

        变量提升(Hoisting)是 JavaScript 中的一种行为,指的是变量和函数声明在代码执行前被提升到其所在作用域的顶部。这意味着你可以在声明之前使用这些变量和函数。

变量提升的基本规则:

  1. 变量声明提升

    • 只有变量声明会被提升,而不是赋值。例如:
      console.log(x); // 输出:undefined
      var x = 5;
      
      上面的代码等同于:
      var x;
      console.log(x); // 输出:undefined
      x = 5;
      
  2. 函数声明提升

    • 函数声明会被完整提升,可以在声明之前调用。例如:
      greet(); // 输出:Hello!function greet() {console.log('Hello!');
      }
      
  3. let 和 const 的变量提升

使用 let 和 const 声明的变量也会被提升,但不会初始化。在声明之前访问这些变量会抛出 ReferenceError。例如:

console.log(a); // 报错:ReferenceError: Cannot access 'a' before initialization
let a = 5;

 这类变量会处于“暂时性死区”(Temporal Dead Zone, TDZ)中,直到声明被执行前无法访问。

总结:

var 声明的变量和函数会被提升到作用域的顶部,变量会被初始化为 undefined
let 和 const 声明的变量也会被提升,但它们在声明之前不可用,试图访问这些变量会导致错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543647.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+MySQL的教学资料管理系统

系统展示 管理员后台界面 教师后台界面 系统背景 在当今信息化高速发展的时代,教育机构面临着日益增长的教学资料管理需求。为了提升教学管理的效率,优化资源的配置与利用,开发一套高效、便捷的教学资料管理系统显得尤为重要。基于SpringBoot…

出海企业如何利用海外云手机开展业务?

随着全球化的持续推进,越来越多的企业将目光投向海外市场。然而,面对不同国家的网络环境、政策限制以及文化和语言的差异,出海企业在拓展海外业务时遇到了许多障碍。海外云手机作为一种创新的解决方案,为企业提供支持和帮助。 海外…

Spring Data Rest 远程命令执⾏命令(CVE-2017-8046) 靶场攻略

靶场环境 vulhub/spring/CVE-2017-8046 漏洞复现 1. 访问 http://47.113.231.0:8080/customers/1 2.抓取数据包,使⽤PATCH请求来修改 PATCH /customers/1 HTTP/1.1 Host: 47.113.231.0:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en U…

微信抢红包设计

包几个红包,发红包的总金额塞钱进红包,弹出支付的界面,支付完之后就会被发到 群里抢拆红包,才是真正的抢红包 红包金额怎么分配 每个人至少抢到1分钱人数抢到的金额之和就应该是红包的总金额一个人抢的红包不应该极度的大&#…

选择排序(C语言实现)

目录 1.基本思想 2.代码实现 代码思路 代码实现 代码测试 3.复杂度分析 1)时间复杂度 2)空间复杂度 4.特性总结 1.基本思想 选择排序是一种简单直观的比较排序算法。该算法的基本思想是在每一轮中选出当前未排序部分的最小(或最大&a…

xv6讲解(2) Operating system organization

这一章 讲操作系统是如何实现进程并发、进程隔离和进程交互(multiplexing isolation and interaction) 进程并发: 操作系统需要同时支持多个进程。如一个进程可以使用fork来启动新的进程。对计算机的资源进行时间共享,确保所有进程都有机会执行。 进程…

AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)、“智谱AI”(glm-4-0520)生成了今日要点以及每条资讯的摘要。欢迎阅…

计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)

1,绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

【Java】JVM基本组成

一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …

java项目之基于springboot的医院资源管理系统源码

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院资源管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

GUI编程之MATLAB入门详解(01)

⛄前言 图形用户界面的设计是MATLAB的核心应用之一。当用户与计算机之间或用户与计算机程序之间进行交互操作时,舒服高效的用户接口功能则会对用户产生极大的吸引力。图形用户界面(GUI)则通过窗口、图标、按钮、菜单、文本等图形对象构成用户…

瑞璟湾居安居房附近的工地免费停车位探寻

从前海卓越骑行30分钟就可以达到瑞璟湾居安居房,顺着前海的繁华沿途过来就越发觉得瑞璟湾居的地段真的是王炸哈。虽然安居房均价45745.43元/平方米,但是对比附近商品房和宝安现代化的城市规划,感觉这个楼盘应该可以快速去化。虽然我也是安居房…

如何使用cmd命令查看本机电脑的主机名?

1、按键盘win R 键,输入cmd,然后按一下【回车】 2、输入ping -a localhost , 然后按下【回车】 3、如下Ping 后面的DESKTOP-ALB9JF7即是本机电脑的【主机名】

面向对象程序设计——mapの简析

1.map的定义 Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持⼩于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的 内存是从空间配置器申请的。⼀般情况下&#xff0c…

OpenBayes 教程上新|让虚拟偶像活起来!LivePortrait 实现超逼真表情迁移

过去,使用单一图像生成动态视频效果需要复杂的动画技术和大量的手工操作。特别是在控制眼睛和嘴唇等细节上,耗时且难以实现逼真的同步效果。 LivePortrait 在最新版本中通过精确的画像编辑和视频编辑等功能,极大地简化了这一过程。创作者可以…

调度_命令行_环境变量

linux的进程调度算法 饥饿问题 新建进程/时间片结束进程,若放回active,很可能该进程优先级太高,下一个还是执行该进程,导致不断执行同一进程,各进程调度不均衡。 饥饿问题解决 新建进程不能到active,要到…

论文大杀器!分享4款ai论文写作工具软件

在当今学术研究和论文写作领域,AI技术的应用已经变得越来越普遍。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。本文将重点介绍四款优秀的AI论文写作工具,并特别推荐千笔-AIPassPaper。 一、千笔-AIPassPaper 传送门…

RTR_Chapter_6 上

第六章 纹理 表面纹理(texture)是指其外观和给人的视觉感受,就像是一幅油画的图案一样。而在计算机图形学中,纹理化则指的是一个过程,即通过使用一些图像、函数或者其他数据,来对每个表面位置的外观表现进行…

看Threejs好玩示例,学习创新与技术(React-three-fiber)

什么,竟有人把ThreeJS和React绑定在一起,混着用? 1、VUE劫持问题 暂先把今天的问题先放一边,先简单回顾下vue劫持的情况。vue会把data里面的数据自动转换为属性,方便界面与数据交互。这本身是没有任何问题&#xff0…