es6(let与const命令)
es6(let与const命令)
理论区别
var | let | const |
---|---|---|
在函数作用域内或者全局有效,没有块级作用域 |
只在let 命令所在的代码块内有效
|
只在声明所在的块级作用域内有效 |
能重复声明 | 不能重复声明 | 不能重复声明 |
存在变量提升 | 暂时性死区 | 暂时性死区 |
举例
var与let、const的区别(一)
基本用法
var a = [];
for (var i = 0; i < 10; i++) {a[i] = function () {console.log(i);};
}
a[6]();结果输入: 10
var a = [];
for (let i = 0; i < 10; i++) {a[i] = function () {console.log(i);};
}
a[6]();结果输入: 6
解释说明:
粗暴记忆——一个“{}”相当于一个代码块
(1)用var命令声明 === 全局范围内声明 ∧ var可以重复声明(下一次声明替换上一次)
∴ i 可以经过多次循环,输出结果 10
(2)用let命令声明,当前的 i 只在本轮循环有效
(3)用const命令声明只读的常量,常量不能改变
const一旦声明变量,就必须立即初始化,不能留到以后赋值。
var与let的区别(二)
变量提升
console.log(foo);
var foo = 2;结果输入: undefined
console.log(bar);
let bar = 2;结果输入: ReferenceError
解释说明:
(1)用var命令声明,发生了变量提升
脚本开始运行时
∵ 变量已存在,但是没有值
∴ 会输出undefined
(2)用let命令声明,不发生变量提升
脚本开始运行时
∵ 变量不存在
∴ 会输出undefined
var与let的区别(三)
暂时性死区
- 块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
if (true) {tmp = 'abc';console.log(tmp);let tmp;console.log(tmp);tmp = 123;console.log(tmp);结果输入: ReferenceError ReferenceError undefined 123
}
解释说明:
(1)在代码块中存在let
- 在let命令声明变量之前,都属于变量的“死区”。
- 即使使用typeof运行,亦报错ReferenceError
(2)在代码块中不存在let
- 使用typeof运行,结果输出underfined
var与let的区别(四)
不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。
function func(arg) {let arg; // 报错
}function func(arg) {{let arg; // 不报错}
}
解释说明:
(1)在同一个作用域内
(2)在不同作用域内
块级作用域
作用域 | es5 | es6 |
---|---|---|
全局作用域 | √ | √ |
函数作用域 | √ | √ |
块级作用域 | × | √ |
函数 | 顶层作用域和函数作用域之中声明 | 允许在块级作用域之中声明函数,在块级作用域之外不可引用 |
没有块级作用域的危害
- 内层变量可能会覆盖外层变量
- 用来计数的循环变量泄露为全局变量
ES6 声明变量的六种方法
- var
- function
- let
- const
- import
- class
es6(let与const命令)相关推荐
- ES6 let和const 命令
ES6 let 和 const 命令 1. 变量声明 2. 变量提升问题 3. 暂时性死区(TDZ) 4. 块级作用域 4.1 为什么需要块级作用域? 4.2 ES6的块级作用域 4.3 块级作用域和 ...
- ES6 let和const命令(3)
const 用来声明常量.一旦声明,就不能改变. const在声明必须初始化,只声明不赋值会出错 const的作用域与let一样,只在声明的块级作用域有效. const命令声明的常量也不提升,同样存在 ...
- es6 let和const命令(1)
基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...
- 1. ES6 let 和 const 命令
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
- es6 var、let、const命令
1.let和var <1>let声明的变量仅在块级作用域内有效: var声明的变量在全局有效: <2> var变量乐意在声明之前使用,输出undefined; let 不可以, ...
- 【ES6】let命令、const命令、解构赋值
let命令 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是也存在新的特性. let所声明的变量,只在let命令所在的代码块内有效,避免全局污染.(适用于for循环) {let a ...
- 【面试题】【ES6】let和const命令 (面试必看)
给大家推荐一个实用面试题库 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...
- 关于ES6中let 和 const 命令的用法以及注意事项:
let命令: 基本用法: let定义: 用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> //let代码块内部定义的变量,与var ...
- ES6的let、const命令
1.let命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是 let 所声明的变量,只在let命令所在的代码块内有效. 代码如下: {let a = 1;var ...
最新文章
- LoadRunner系统架构简介与运行原理
- 非线性振动 matlab,用MATLAB分析非线性弹簧振子的振动
- zabbix监控ntpd服务
- C#-datagriview的表头高度的设置
- JavaEE基础(02):Servlet核心API用法详解
- vapor mysql_vapor MySQL 作为Cache
- 常见创建项目编译运行问题汇总
- 周志华-机器学习.pdf 学习心得 附整理材料
- PHP许愿墙的经济可行性,深入PHP许愿墙模块功能分析
- java 批量打印pdf文件_java 打印tiff及批量打印图片技术文章.doc
- 贝叶斯决策(Bayesian Decision Theory)
- 怀旧小虎队 谨防挂马网站和极虎病毒
- 【windows——工具篇】哔哩哔哩快捷键
- Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
- C++-STL-组件(一)-容器05:stack(栈)
- 物流小程序设计开发的功能明细与方案
- [附源码]Node.js计算机毕业设计大学生健康管理系统的设计与实现Express
- 程序人生 | 大龄的程序员都到哪里去了?
- 英飞凌TRAVEO II介绍
- python实现Content-Type: multipart/form-data; boundary=xxx接口的调用
热门文章
- 利用txt索引图像路径或直接对目录下的图像进行逐一测试
- pomelo广播的实现(chat例子分析)
- 区块链技术总结及发展展望
- netflix什么来很_如何使用Netflix的屏幕锁定来禁用播放控件
- Darwin Streaming Server程序结构分析
- 文件被永久删除、格式化怎么办?DiskGenius、minitool来帮你
- Linux CentOS-7.4-x86_64(原版) 百度网盘下载
- iBeacon室内定位应用的5大领域介绍
- Android自定义ViewGroup实现朋友圈九宫格控件
- 支付宝小程序 Trust anchor for certification path not found.