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

相关推荐
贺小涛2 小时前
Vue介绍
前端·javascript·vue.js
csdn_aspnet2 小时前
C++ 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·c++·算法
wsoz2 小时前
快速从C过渡到C++
c语言·开发语言·c++
cch89183 小时前
React Hooks的支持
前端·javascript·react.js
深邃-3 小时前
字符函数和字符串函数(1)
c语言·开发语言·数据结构·c++·算法·html5
初中就开始混世的大魔王3 小时前
3.1 DDS 层-Core
开发语言·c++·网络协议·tcp/ip·信息与通信
曹牧3 小时前
JDK 1.6 ,无法通过安全套接字层(SSL/TLS)加密建立数据库安全连接
java·开发语言·ssl
ofoxcoding3 小时前
React 性能优化实战:我把一个卡成 PPT 的页面优化到丝滑的全过程
javascript·react.js·ai·性能优化