千家信息网

var,let,const的异同点有哪些

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下var,let,const的异同点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、let和var
千家信息网最后更新 2025年11月08日var,let,const的异同点有哪些

小编给大家分享一下var,let,const的异同点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、let和var区别

1.关于变量提升,var能变量提升,let不能

 // 关于var 如下所示console.log(a); //输出undefined,此时就是变量提升var a = 2;  console.log(a); //2//相当于下面的代码var a; //声明且初始化为undefinedconsole.log(a); //输出undefineda=2;    //赋值console.log(a); //2// 关于let 如下所示console.log(a); // 报错ReferenceErrorlet a = 2;//相当于在第一行先声明a但没有初始化,直到赋值时才初始化//直接用let声明变量不赋值是会打印undefined,这时候初始化了let a;console.log(a);//值为undefined

2.暂时性死区:块级作用域内存在let命令,它所声明的变量就"绑定"这个区域,不再受外部的影响重点内容,简而言之,就是某个代码块有let指令,即使外部有名称相同的变量,该代码块的同名变量与外部的变量也互不干扰。而var不会,如下所示:

//letvar a = 123;if (true) { let a="abc"; console.log(a); //输出abc }console.log(a);  //输出值为123,全局a与局部a互不影响//varvar a = 123;if (true) { var a="abc"; console.log(a); //输出abc }console.log(a);  //输出值为abc,全局的已被改变

总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为"暂时性死区"(temporal dead zone,简称 TDZ)。例子如下:

var tmp=1;if (true) { // TDZ开始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ结束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123}console.log(tmp); //

3.let声明绑定的代码块内,不能重复声明同一个变量,var可以

//a不能重复声明function sub() { let a = 10; var a = 1;}  //报错,Identifier 'a' has already been declaredfunction sub() { let a = 10; let a = 1;}  //同上function sub() { let a = 10; {let a = 1;} //此时不在同一个代码块,不会报错} //var可以重复声明,不会报错function sub() { var a = 10; var a = 1;}

4.类似for循环的代码块,let只在代码块内部有效,var在代码块外部也有效

//let只在代码块内部有效for (let i = 0; i < 10; i++) {}console.log(i); //报错ReferenceError: i is not defined//var在代码块外部也有效for (let i = 0; i < 10; i++) {}console.log(i); //101let在for循环内特别之处:就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。//只在父作用域var a = [];for (let i = 0; i < 10; i++) { a[i] = function () {  console.log(i); };}a[6](); // 6//子作用域重新声明var a = [];for (let i = 0; i < 10; i++) { a[i] = function () {   let i=3; //重新赋值   console.log(i); };}a[6](); // 3 ,取得新的值

二、let和const

1、相同点:

A、变量不提升。
B、暂时性死区,只能在声明的位置后面使用。
C、不可重复声明。

2、不同点:

let声明的变量可以改变。
const声明一个只读的常量。一旦声明,常量的值就不能改变,且声明的时候必须初始化赋值。
let a; //undefined
const b;//报错,声明的时候必须赋值

let a=1;
a=2; //可改变

const b=1;
b=2; //报错,不能改变值

//一些自己觉得要注意的点
let a=null; //a=null
a=undefined; //a=undefined
a=2; //a=2
const a=null; //a=null,const也可以定义null和undefined
const b=undefined; //b=undefined
b=2; //报错,不能改变值

本质:

const实际上保证的,并不是变量的不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

A、五种基本数据类型(Number,String,Boolean,Undefined,Null):值就保存在变量指向的那个内存地址,等同于常量。不能改变值。

B、复杂数据类型(Object:数组、对象):该类型变量名不指向数据,而是指向数据所在的地址,const只保证变量名指向的地址不变,并不保证改地址的数据不变,因此可以对该地址的属性值进行修改,但是不能改变地址指向。

const a=[];a.push("Hello"); //可执行,改地址的属性值可以修改a.length=0;   //可执行,同上a=["Tom"];   //报错,不能改变地址指向const b ={};b.prop=123;   //为b添加一个属性,可以成功b.prop    //123b={};    //将b指向另外一个地址,就会报错如果真的想将对象冻结,应该使用Object.freeze方法。const b=Object.freeze({});// 常规模式时,下面一行不起作用,b.prop为undefined// 严格模式时,该行会报错b.prop = 123;

以上是"var,let,const的异同点有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

变量 代码 地址 指向 作用 数据 输出 有效 循环 内存 内容 就是 属性 常量 暂时性 死区 篇文章 类型 保证 异同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 人大金仓数据库简介 支付宝中国网络技术中心是啥 互联网科技新时代 我国实行网络安全等级 祖国的网络技术发达 数据库可以分析不同的系统 丰台区什么是网络技术服务保障 面临的网络安全威胁与风险分析 中国联通网络安全工程师岗 万方数据库文献要付钱吗 网络安全教育的内容ppt 软件开发的盈利预测 软件开发项目如何管理软件 软件开发服务资质三级认证 网络安全班会心得作文 关于网络安全的感想标语 大数据即时查询数据库 构建客户服务信息数据库的要点 天之骄子服务器怎么样 网站服务器管理器图标 为什么流量无法连接到服务器 软件开发实习内容详细 建立数据库表格的代码 软件开发删除功能怎么做 互联网科技公司起什么名字 常州营销服务管理软件开发 学软件开发学多久 数据库大于2t怎么迁移 薛继东网络安全 不同地区数据库同步
0