关于ES6中let 和 const 命令的用法以及注意事项:
let命令:
基本用法:
let定义:
用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
<script> //let代码块内部定义的变量,与var进行对比 {var a =12;let b =10console.log(a) //-----12console.log(b) //-----10 }console.log(a) //-----12console.log(b) //----- not undefined </script>
for
循环很合适使用let
命令。在for
循环体内有效,在循环体外引用就会报错。//let 使用在for循环里面使用不能在外面调用 for(let i=0;i<=5;i++){console.log(i); //------1,2,3,4,5}console.log(i); //----- not undefined
let在for循环添加事件中最典型的使用方式
<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title></head><body><button>1</button><button>2</button><button>3</button><button>4</button> /*创建六个按钮*/<button>5</button><button>6</button><script type="text/javascript">// let局部引用var btns = document.getElementsByTagName('button');for(let i=0;i<btns.length;i++){ //--- 在本行中如果将let更改为var 则点击所有的按钮都会打印数字六,如果使用let,则会根据点击的数字的顺序一次打印,起始数字为0btns[i].onclick =function(){console.log(i)}} </script></body> </html>
/ let在for循环作为循环参数的时候其实是两个作用域大括号里面是一个子作用域如果里面再次定义余循环参数相同的变量,则不会产生相互影响
for(let i=0;i<=3;i++){let i ="a";console.log(i); //----4个a}
不存在变量提升:
let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
console.log(a) // ----not defined let a = 12;
暂时性死区:
ES6 明确规定,如果区块中存在
let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用
let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。// 暂时性死区 let 不允许重复定义一个变量 // 大括号括起来的称之为块作用域 有循环,seitch 结构 if结构 for(let i =0 ;i<3;i++){console.log(i)let i = '123'; }// 暂时性死区 function bar (x=y,y=2){return[x,y]; } ba=[];
不允许重复定义:
暂时性死区 let 不允许重复定义一个变量
for(let i =0 ;i<3;i++){console.log(i)let i = '123'; }
块级作用域:
ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
第一种场景,内层变量可能会覆盖外层变量。
if(true){function say(){console.log(1)} } say();
ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><script type="text/babel">// Your ES6 codeif(true){function say(){console.log(1)}}say();</script>
注意:为了减轻因此产生的不兼容问题,ES6 在附录 B里面规定,浏览器的实现可以不遵守上面的规定,有自己的行为方式。
- 允许在块级作用域内声明函数。
- 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
- 同时,函数声明还会提升到所在的块级作用域的头部
浏览器环境:
Babel 也可以用于浏览器环境,使用@babel/standalone模块提供的浏览器版本,将其插入网页。
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
// Your ES6 code
</script>
PEPL在线编辑器
const命令:
基本用法:
const定义:
声明一个只读的常量。一旦声明,常量的值就不能改变。const一旦声明变量,就必须立即初始化,不能留到以后赋值
const PI = 3.1415; console.log( PI ) // ---3.1415PI = 3; // --- TypeError: Assignment to constant variable.
const foo; //--- SyntaxError: Missing initializer in const declaration //表示,对于const来说,只声明不赋值,就会报错。
const
的作用域与let
命令相同:只在声明所在的块级作用域内有效。实例与上let例子相似const
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。本质:
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
const foo = {};// 为 foo 添加一个属性,可以成功 foo.prop = 123; foo.prop // 123// 将 foo 指向另一个对象,就会报错 foo = {}; // TypeError: "foo" is read-only
注:常量foo
储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo
指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。
关于ES6中let 和 const 命令的用法以及注意事项:相关推荐
- 【面试题】【ES6】let和const命令 (面试必看)
给大家推荐一个实用面试题库 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...
- es6(let与const命令)
es6(let与const命令) 理论区别 var let const 在函数作用域内或者全局有效,没有块级作用域 只在let命令所在的代码块内有效 只在声明所在的块级作用域内有效 能重复声明 不能重 ...
- ES6中使用let, const声明的变量, 在window对象下是获取不到的
ES6中使用let, const声明的变量, 在window对象下是获取不到的 今天在写demo的时候发现, 使用let或者const声明的变量, 在window对象下使用this来获取发现获取不到 ...
- linux 移动剪切命令,Linux中vi的复制命令的用法详解
在Linux系统中,使用VI编辑的时候经常用到的操作就是复制粘贴,那么下面由学习啦小编为大家整理了linux中vi的复制命令的用法详解的相关知识,希望对大家有帮助! Linux中vi的复制命令的用法详 ...
- php ping icmp,Linux_详解Linux系统中ping和arping命令的用法,pingping 程序使用 ICMP 协议的强 - phpStudy...
详解Linux系统中ping和arping命令的用法 pingping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答.回显请求数据报(" ping ...
- ES6的let、const命令
1.let命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是 let 所声明的变量,只在let命令所在的代码块内有效. 代码如下: {let a = 1;var ...
- linux中如何用ftp命令下载文件,linux中ftp下载文件命令的用法
linxu下的ftp命令是用来下载文件或者上传文件的,下面由学习啦小编为大家整理了linux的ftp下载文件命令的用法的相关知识,希望对大家有帮助! 一.linux中的ftp下载文件命令的用法 从远程 ...
- linux系统关于ping的命令,详解Linux系统中ping和arping命令的用法
pingping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答.回显请求数据报(" pings ")含有一个 IP 及 ICMP 的报头 ...
- CMD中Pushd和Popd命令的用法
Pushd和Popd命令,这两个命令一般都是同时使用,意思就是Push和Pop Pushd 命令 改变当前目录到指定目录,并保存当前的目录在堆栈顶端 Popd 命令 改变当前目录,跳转到堆栈顶端保 ...
最新文章
- 舒工给您娓娓道来:2019-nCoV,教室布局筛查追溯系统算法解密!
- AI一分钟 | 阿里与南洋理工成立AI联合研究院;传蔚来汽车拟赴美IPO,融资20亿美元
- Ubuntu 18.04 关闭蓝牙开机启动
- 后宫佳丽三千,皇后只有一个
- MAVEN学习笔记-maven的获取和安装
- 自己动手实现arm函数栈帧回溯【转】
- Hive_Hive的数据模型_分区表
- 自媒体文章如何提高原创度以及如何检测原创度
- 简单的了解下前端路由 hash 与 history 差异
- vlan internal allocation policy ascending解释
- 小知识点日记 2013-1-17 至 2013-6-13
- 根号五除以三用计算机算,根号5等于多少怎么算
- excel高级筛选怎么用_神!Excel高级筛选原来如此好用
- 油耳戴什么款式耳机好?骨传导耳机最合适
- librtmp推流到YouTube失败
- 微信公众平台开发实战
- GitHub上广受欢迎的下载神器:youtube-dl
- spring获取Bean报错
- Python函数 - - reverse()和reversed()
- Bearer ${Token},放置在HTTP头中发送
热门文章
- java堆内存设置_java堆内存设置原理
- SpringCloud Stream+RabbitMQ自定义通道
- Error creating bean with name ‘configurationPropertiesBeans‘ defined in class path resource异常分析
- mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
- 7.Numpy array 分割(纵向分割/横向分割/错误分割/不等量分割/其他分割)
- 论文的参考文献格式怎么弄呢?
- android t9 实体键盘,最强安卓老人机 T9键盘/爷爷的荣耀神器
- ANSYS Electronics Suite 2021 R2
- StateFlow 状态流
- 当SWOOLE遇上PROTOCOL