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命令)相关推荐

  1. ES6 let和const 命令

    ES6 let 和 const 命令 1. 变量声明 2. 变量提升问题 3. 暂时性死区(TDZ) 4. 块级作用域 4.1 为什么需要块级作用域? 4.2 ES6的块级作用域 4.3 块级作用域和 ...

  2. ES6 let和const命令(3)

    const 用来声明常量.一旦声明,就不能改变. const在声明必须初始化,只声明不赋值会出错 const的作用域与let一样,只在声明的块级作用域有效. const命令声明的常量也不提升,同样存在 ...

  3. es6 let和const命令(1)

    基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...

  4. 1. ES6 let 和 const 命令

  5. ES6之let(理解闭包)和const命令

    ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...

  6. es6 var、let、const命令

    1.let和var <1>let声明的变量仅在块级作用域内有效: var声明的变量在全局有效: <2> var变量乐意在声明之前使用,输出undefined; let 不可以, ...

  7. 【ES6】let命令、const命令、解构赋值

    let命令 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是也存在新的特性. let所声明的变量,只在let命令所在的代码块内有效,避免全局污染.(适用于for循环) {let a ...

  8. 【面试题】【ES6】let和const命令 (面试必看)

    给大家推荐一个实用面试题库 1.前端面试题库 (面试必备)            推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...

  9. 关于ES6中let 和 const 命令的用法以及注意事项:

    let命令: 基本用法: let定义: 用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> //let代码块内部定义的变量,与var ...

  10. ES6的let、const命令

    1.let命令: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是 let 所声明的变量,只在let命令所在的代码块内有效.        代码如下: {let a = 1;var ...

最新文章

  1. LoadRunner系统架构简介与运行原理
  2. 非线性振动 matlab,用MATLAB分析非线性弹簧振子的振动
  3. zabbix监控ntpd服务
  4. C#-datagriview的表头高度的设置
  5. JavaEE基础(02):Servlet核心API用法详解
  6. vapor mysql_vapor MySQL 作为Cache
  7. 常见创建项目编译运行问题汇总
  8. 周志华-机器学习.pdf 学习心得 附整理材料
  9. PHP许愿墙的经济可行性,深入PHP许愿墙模块功能分析
  10. java 批量打印pdf文件_java 打印tiff及批量打印图片技术文章.doc
  11. 贝叶斯决策(Bayesian Decision Theory)
  12. 怀旧小虎队 谨防挂马网站和极虎病毒
  13. 【windows——工具篇】哔哩哔哩快捷键
  14. Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
  15. C++-STL-组件(一)-容器05:stack(栈)
  16. 物流小程序设计开发的功能明细与方案
  17. [附源码]Node.js计算机毕业设计大学生健康管理系统的设计与实现Express
  18. 程序人生 | 大龄的程序员都到哪里去了?
  19. 英飞凌TRAVEO II介绍
  20. python实现Content-Type: multipart/form-data; boundary=xxx接口的调用

热门文章

  1. 利用txt索引图像路径或直接对目录下的图像进行逐一测试
  2. pomelo广播的实现(chat例子分析)
  3. 区块链技术总结及发展展望
  4. netflix什么来很_如何使用Netflix的屏幕锁定来禁用播放控件
  5. Darwin Streaming Server程序结构分析
  6. 文件被永久删除、格式化怎么办?DiskGenius、minitool来帮你
  7. Linux CentOS-7.4-x86_64(原版) 百度网盘下载
  8. iBeacon室内定位应用的5大领域介绍
  9. Android自定义ViewGroup实现朋友圈九宫格控件
  10. 支付宝小程序 Trust anchor for certification path not found.