js中let const var的区别
1.var声明的变量会存在变量提升,而let 和 const的变量不会存在变量提升
也就是var声明的变量会被提升到他所在的作用域顶端去
// var:
console.log(a) // 打印为 'undefined'
var a = 1
// let 和 const
console.log(b) // 报错, b没有被声明
let b = 2
console.log(c) // 报错, c没有被声明
const c = 3
2.var声明的变量会挂载到window上,会放在全局,let 和 const声明的变量不会
var a = 1
console.log(a, window.a) // 1 1
let b = 2
console.log(b, window.b) // 2 undefined
let c = 3
console.log(c, window.c) // 3 undefined
3.let和const声明的变量会形成块级作用域,var不会
也就是用let命令新增了块级作用域,外层作用域无法获取到内层作用域,非常安全明了。即使外层和内层都使用相同变量名,也都互不干扰。
{let b = 1var c = 2console.log(b) // 1
}console.log(c) // 2
console.log(b) // b is not defined,b不可以访问内层作用域值
4.let和const不能在同一作用域下声明同一变量名,而var可以
var a = 3
console.log(a) // 3
var a = 5
console.log(5) // 5
//直接会报错:b已经被声明
let b = 1
console.log(b)
let b = 2
console.log(b)
PS:注意!!! 按照上面的理解大家肯定会认为a打印的值为什么不是上面声明的全局变量呢?
var a = 1
{console.log(a) // 这里打印会报错“Cannot access 'a' before initialization”let a = 1
}
上面代码中,存在全局变量a,但是块级作用域内let又声明了一个局部变量a,导致后者绑定这个块级作用域,所以在let声明变量前,对a赋值会报错。
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
敲黑板了!!!!!!那在for循环中let,const,var 又会有什么区别呢???
看一下使用var
声明的
for (var i = 0; i < 3; i++) {setTimeout(() => {console.log(i)}, 1000)
}
可以看到这里的打印结果为3次3,一看懵了原谅我还是个小菜鸟。。网上百度了许多,这里写一下自己的理解。。。
①for
循环是同步任务,setTimeout
是异步任务,因此要for
循环完毕后才会执行setTimeout
()。
②使用var
声明的变量i
是全局变量,在执行完for
循环后,i
已经变成了3,异步队列中有3次setTimeout
任务,访问到的i
都是同一个,这个时候打印出来的i
当然是为 3 了
接下来看下let
声明的
for (let i = 0; i < 3; i++) {setTimeout(() => {console.log(i)}, 1000)}
可以看到打印结果。更加诧异了,和var
声明的打印出来的结果完全不同,执行过程还是和 ① 相同,唯一不同的是,此时for
循环出来的i
每次都不同,每次都创建了一个新的i
,因此在异步任务的时候输出对应的i
要注意的是:不能使用const去声明,因为const是常量
js中let const var的区别相关推荐
- JS中 let 和var的区别
JS中let和var 的区别 简单介绍let var的常见变量提升 ES6可以用let定义块级作用域变量 let配合for循环的独特应用 let没有变量提升与暂时性死区 let变量不能重复声明 简单介 ...
- js中Let和Var的区别
写在前面: 本文转载自:https://www.cnblogs.com/fly_dragon/p/8669057.html 作者:FlyDragon 出处:http://www.cnblogs.com ...
- js中 let和var的区别
引入let的原因正是var的局限性,相比于var,let有以下几点优势: 作用域 var的作用域是会提升的,var声明的变量只能是全局的或者是整个函数块的. let则允许声明一个作用域被限制在块级中的 ...
- css里面的let,js中let和var定义变量的区别
javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...
- Js中的style,currentStyle,getComputedStyle()区别
Js中的style,currentStyle,getComputedStyle()区别 样式表有三种方式: 1.内嵌样式(inline Style)-是写在Tag里面的,内嵌样式只对所有的Tag有效 ...
- js中的extend的用法及其JS中substring与substr的区别
1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的. ...
- js中click()与onclick()的区别
由一个简单示例到 js中click()与onclick()的区别 之前朋友在学习js的时候遇到一个有意思的问题. 先贴一份代码说一下代码构成 这里是html结构 <ul><li> ...
- js中的const 命令
js中的const 命令 一直以来我在我字典里认为const 命令就是用来声明一个常量,然后并非如此,这也是我在工作中偶然发现的,然后查了下文档才得知,记录在档,以供参考: const 定义 cons ...
- js中parentNode和parentElement的区别和用法
了解本篇的基础必须知道什么是节点,关于html dom节点知识点和节点类型的知识,分别看<js节点都有哪些类型?怎么判断是哪种节点类型?>和<js属性节点获取和移除>,下面直接 ...
最新文章
- 使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。...
- 微信小程序——获取openGid
- oracle定时器每天下午6点_周五下午6点到8点 万盛经开区党工委书记、管委会主任袁光灿直播带货...
- 携程用的什么地图_2020什么项目最值得投资
- 浅谈Nginx负载均衡与F5(硬件)的区别
- cad指定服务器名称,配置网络许可服务器 | AutoCAD 2022 | Autodesk Knowledge Network
- 超形象!流体版的勾股定理演示动图...
- Precedence Problems of C Operators
- 使用JavaScript下进行iframe的DOM操作(考虑浏览器兼容性)
- 毕设题目:Matlab元胞自动机病毒仿真
- 苹果蓝牙耳机怎么接电话_如何在开车时可以更安全的接电话——ROMAN R6000蓝牙耳机...
- deepin系统修改IP地址记录
- C#委托二——委托协变
- 梁辉老师.狼性营销实战训练专家
- MTO和Manytasking MATP MOOMFO 中G函数
- STL笔记(二)---空间配置器
- 【电商】电商后台系统整体介绍
- Python Selenium 自动修改路由器WAN IP
- linux密码叹号,Linux中“!”感叹号用法技巧大全
- 机器学习第十章---降维与度量学习