var、let、const、无申明 四种变量在赋值前,使用的情况

var、let、const、无申明 四种变量在赋值前,使用的情况

javascript 复制代码
//var 变量
console.log(a); // 输出 undefined(不会报错)
var a = 5;

//let 变量
console.log(b); //ReferenceError: Cannot access 'b' before initialization (未初始化)
let b = 6;

//const 变量 ,变量赋值后不可修改,如果变量指向的是对象地址,对象内的内容,可以修改。
console.log(c); //ReferenceError: Cannot access 'c' before initialization (未初始化)
const c = 6;

//无申请明 变量:
console.log(d); //ReferenceError: d is not defined (未定义)

JavaScript 引擎在执行代码前,浏览器会对JS代码先进行编译,其中会扫描所有的变量进行登记造册,

var变量 被扫描到后,引擎会初始化该变量为一个特殊值:undefined

let/const变量 被扫描到后,只是做了一个登记,引擎不会初始化该变量。未赋值前使用,报 Cannot access 'x' before initialization。

无申明变量 ,在编译时都不会被扫描到,更不会做登记。未赋值前使用,报:ReferenceError: x is not defined (未定义)

变量提升这个术语,描述的正是这个"声明在编译阶段被提前处理"的现象。

var 的"提升"是声明+默认初始化(为undefined)。

let/const 的"提升"是声明+不初始化(形成暂时性死区)。

相关推荐
微学AI1 天前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
郭老二1 天前
【前端】vue3:编译步骤
前端
豆瓣鸡1 天前
算法日记 - Day3
java·开发语言·算法
不在逃避q1 天前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁1 天前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
韭菜炒鸡肝天1 天前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9851 天前
高进度算法模板速记(待完善)
java·前端·算法
陈随易1 天前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
Aaron - Wistron1 天前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
新中地GIS开发老师1 天前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发