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 的"提升"是声明+不初始化(形成暂时性死区)。

相关推荐
星空椰14 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
kyriewen15 小时前
微软用Go重写TypeScript编译器,速度提升10倍,网友:这是“背叛”还是“救赎”?
前端·typescript·ecmascript 6
白露与泡影15 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
Ceelog15 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
凯瑟琳.奥古斯特15 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
西陵15 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程
雪度娃娃15 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
Hyyy16 小时前
普通前端续命周报——第2周
前端
swipe16 小时前
DeepAgents 实战:用多 Agent 架构搭一个深度调研助手
javascript·面试·llm
wuxinyan12316 小时前
工业级大模型学习之路030:Streamlit 企业级智能体前端工作台
前端·学习·streamlit·智能体