博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6之块级作用域
阅读量:6202 次
发布时间:2019-06-21

本文共 1185 字,大约阅读时间需要 3 分钟。

块级作用域

在es6(es2015)之前, 也就是es5中,作用域只有两种:

1. 全局作用域
2. 函数作用域
正因为只有这两种作用域, 所以存在 "变量提升" 现象, 即变量可以在声明之前使用,值为undefind.如下

console.log(tem);//输出undefinedvar tem = 6;

上面代码中,变量 tem 会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。

在es6中新增了块级作用域,新增的块级作用域通过 let 和 const 属性来体现:

console.log(tem);//输出undefinedlet tem = 6;

下面介绍一下 let 和 const

let 用法和 var 类似, 但是let声明的变量只在块级作用域内有效

function fun1() {  let n = 5;  if (true) {    let n = 10;  }  console.log(n); // 5}

const 声明的是一个只读的常量.一旦声明, 常量的值就不能再改变,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

const PI = 3.14;PI // 3.14PI = 3;// TypeError: Assignment to constant variable.

let和const有以下共同点

1.只在声明的块级作用域内有效

2.不存在变量提升
3.存在暂时性死区

if (true) {  n = 'abc'; // ReferenceError  let n;}

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

在代码块内,使用let 或 const命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

4.不可重复声明, let 和 const都不允许在同一作用域内重复声明同一个变量

if(true) {  let a = 10;  var a = 1;}//Identifier 'a' has already been declared
if(true) {  let a = 10;  let a = 1;}//Identifier 'a' has already been declared
if(true) {  const a = 10;  let a = 1;}//Identifier 'a' has already been declared

 

转载于:https://www.cnblogs.com/yuqing6/p/6777746.html

你可能感兴趣的文章
2015年创业中遇到的技术问题:121-130
查看>>
docker之数据卷
查看>>
有关李老师讲座的总结
查看>>
MacBook故障处理
查看>>
Linux运维常用知识(4)
查看>>
创建第一个PowerBI报表
查看>>
Nginx反向代理关于端口的问题
查看>>
重启打印机后为什么还会打印
查看>>
基于Cobbler实现多版本系统自动部署
查看>>
ASP.net页面中请求远程Web站点
查看>>
LINUX下多路径(multi-path)介绍及使用
查看>>
MacBook安装Windows双系统及虚拟机的一点使用心得
查看>>
exchange2010结合正则表达式添加规则
查看>>
oracle insert all 复合表插入
查看>>
【iptables】NAT功能
查看>>
Mysql安装详细过程,tar方式
查看>>
thinkphp中遇到的一些问题及解决方法
查看>>
新建一个临时快速隐藏用的O盘
查看>>
用栈解决回文问题-----C代码
查看>>
TNS-03505: 无法解析名称
查看>>