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

相关推荐
顾昂_31 分钟前
内存泄漏排查和 Chrome DevTools 使用教程
前端·javascript·面试
IT_陈寒1 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
An_s2 小时前
rust开发wasm与浏览器(js)交互
javascript·rust·wasm
山河木马2 小时前
GPU自动处理专题4-填充覆盖区域(光栅化)
javascript·webgl·计算机图形学
从零开始的代码生活_2 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
悦儿遥遥雨12 小时前
PXE + Kickstart 无人值守批量部署系统
linux·javascript·nginx
31535669132 小时前
Superpowers:GPT-5.6 时代下的流程毒瘤
前端·后端
wabs6662 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky2 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
清秋3 小时前
全网最全 ECMAScript 攻略( 更新至 ES2026)
前端·javascript·编程语言