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

相关推荐
笨笨狗吞噬者1 分钟前
Opus 4.7 使用体验
前端·ai编程
.千余7 分钟前
【Linux】基本指令3
linux·服务器·开发语言·学习
No8g攻城狮13 分钟前
【前端】Vue 中 const、var、let 的区别
前端·javascript·vue.js
文心快码BaiduComate18 分钟前
Comate搭载Kimi K2.6,长程13h!
前端·后端·程序员
南境十里·墨染春水19 分钟前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水20 分钟前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
豹哥学前端28 分钟前
新手小白学前端day4: Position定位
前端
fishmemory7sec34 分钟前
Vue大屏自适应容器组件:v-scale-screen
前端·javascript·vue.js
饺子不吃醋35 分钟前
Promise原理、手写与 async、await
前端·javascript
PILIPALAPENG39 分钟前
第3周 Day 2:Function Calling —— 让 Agent 听懂人话,自己干活
前端·人工智能·python