千家信息网

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

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下var,let,const的异同点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、let和var
千家信息网最后更新 2025年01月18日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安全错误 数据库的锁怎样保障安全 数据库ER图上的字母是什么意思 天文ned数据库如何使用 北京点我网络技术有限公司客服 网络安全产品销售人员 网络安全黑客教程 网络安全入门学什么 网络技术对教学影响研究报告 服务器进入桌面后检测硬盘不动 杭州一app棋牌软件开发 视频聊天软件开发有什么用 中国电信软件开发面试题 纬创资通中山软件开发 linux 服务器卡顿 黄浦区网络软件开发定制收费 昆山正规网络技术哪个好 传真服务器搭建 微软海底数据库金属材料 编辑数据库怎么复制 公务员面试 网络安全 win7搭建ntp服务器 网络安全 律师 梦幻西游手游我爱你服务器多少级 网络安全教育有趣标语 内部网络通过服务器上网 珠海汽车软件开发公司 程序软件开发销售价格 云网络技术哪些学校有该专业 短信登录显示服务器错误 黄浦区网络软件开发定制收费 概括《网络安全法》的作用
0