当前位置:网站首页>ES6-02-let和const关键字
ES6-02-let和const关键字
2022-07-31 05:18:00 【春意迟迟、】
1.理解代码块是理解let、const的前提:
(1)var obj={name:"karen"} 对象
(2)var fn=function(){} 函数
(3){}或者if(){}或者for(){} 代码块
这些都属于代码块。
<script> // 例1:此处var是全局变量 { var a=20; var b=30; console.log(a); } console.log(b); </script>运行结果为:20 30
<script> // 例2: if(true){ var a=10; console.log(a); } console.log(a); </script>运行结果为:10 10 此处两个a都打印了
<script> // 例3: if(false){ var a=10; console.log(a); } console.log(a); </script>运行结果为:undefined
分析:因为if条件为false,里面的代码不运行,所以a就没有定义和赋值,也不会运行if语句块里面的打印语句;第二个打印语句对a有隐式的声明,但没赋值,所以结果为undefined。
<script> // 代码块的体现:如果我想跳过i=1的循环,而不是里面的循环 mylabel:for(var i=0;i<3;i++){ for(var j=0;j<5;j++){ if(i=1){ continue mylabel; } } } </script>
2.ES6新的变量修饰符let关键字
首先要清楚:var:可以声明的时候不赋值、 可以先访问再声明、可以声明相同的变量名;
let:也可以声明的时候不赋值、不可以先访问再声明、不可以声明相同的变量名
<script> // 块级作用域: { let a=100; console.log(a,"第一个a") a="hello"; console.log(a,"第二个a") } console.log(a,"第三个a") </script>运行结果为:100 第一个a hello 第二个a 报错
分析:100、hello顺寻执行没有问题,第三次报错是因为let声明的a有作用域,是个局部变量,而第三次打印时,全局变量没有定义a,所以找不到a就报错
<script> for(var i=0;i<10;i++){ setTimeout(function(){},100) } console.log(i) </script>运行结果为:
![]()
<script> for(let i=0;i<10;i++){ setTimeout(function(){ console.log(i) },100) } console.log(i) </script>运行结果为:
分析:第一次打印是for循环外面的i,此处的i没有声明;接着才运行for循环里面的函数,打印函数里面的i。(let关键字是有作用域的)
<!-- 笔试题 -->、 <script> let a=90; if(false){ console.log(a) var a=20; } console.log(a) </script>运行结果为:报错
分析:因为let声明的a和var声明的a在同一作用域,而let关键字在同一作用域不能声明同名变量;此处虽然if的条件为false,但var根据形实函运的顺序,var a;被隐式声明了,它与let声明的a都存在于全局变量,所以会报错。
<!-- 笔试题 -->、 <script> let a=90; if(false){ console.log(a) let a=20; } console.log(a) </script>运行结果为:90
分析:let关键字不会隐式提升,所以当if不成立时,里面的代码没有运行,所以结果为90
<!-- 笔试题 -->、 <script> if(true){ let a=20; } console.log(a) </script>结果会报错,因为let有作用域,let会形成暂时性死区
<!-- 笔试题 -->、 <script> let a=90; if(true){ console.log(a) let a=20; } </script>结果会报错
分析:if里面的let形成暂时性死区,打印语句就识别不了外面的a,就识别里面的a,里面的a是用let声明的,且位于打印语句之后,就报错了。
3.js的常量修饰符 const
const修饰的常量不可以被修改。相当于只能初始化一次(初始化:第一次赋值),且const关键字在声明的时候就必须赋值。
<script> const a=60; a=80; </script>运行结果为:报错 因为const关键字只能初始化一次,值不能被修改。
<script> const b; b=30; </script>运行结果为:报错 因为const关键字在声明的时候就必须初始化。
修饰标识符的只有var、let、const、function这四个关键字。
边栏推荐
猜你喜欢

IDEA概述和安装及调试

pyspark.ml feature transformation module

MW: 3400 4-Arm PEG-DSPE four-arm-polyethylene glycol-phospholipid a saturated 18-carbon phospholipid

PyTorch Study Notes 08 - Loading Datasets

【内网开发日记】用websocket手搓一个聊天软件

DSPE-PEG-Thiol DSPE-PEG-SH phospholipid-polyethylene glycol-thiol liposome for later use

Learn how to get a database connection with JDBC

Pytorch Daily Practice - Predicting Surviving Passengers on the Titanic

Websocket协议解析与QT代码示例

2021-09-30
随机推荐
学习JDBC之获取数据库连接的方式
DSPE-PEG-Biotin, CAS: 385437-57-0, phospholipid-polyethylene glycol-biotin prolongs circulating half-life
The solution to the IDEA console not being able to enter information
哈希表基础
CSDN上markdown编写的一些便捷操作
力扣刷题.快乐数
Learning and understanding of ROS service programming
Three methods of accessing image pixels in opencv
解决nx安装 jtop问题
概率论相关笔记
这些数组技巧,我爱了
Use usb_cam to open multiple cameras at the same time
力扣.有效的字母异位词
【Rhapsody学习笔记】2:Count Down
力扣151. 颠倒字符串中的单词
2021年开发人员的绊脚石:构建时间长
力扣.字母异位词分组
在 AWS 上从零开始设置 Incredibuild 构建系统
WIN10,配置adb环境
Incredibuild 宣布支持 Yocto
