前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >es6之块级作用域

es6之块级作用域

作者头像
用户1741436
发布2018-05-16 09:52:10
5630
发布2018-05-16 09:52:10
举报
文章被收录于专栏:前端杂谈前端杂谈

块级作用域

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

代码语言:javascript
复制
console.log(tem);//输出undefined
var tem = 6;

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

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

代码语言:javascript
复制
console.log(tem);//输出undefined
let tem = 6;

下面介绍一下 let 和 const

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

代码语言:javascript
复制
function fun1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

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

代码语言:javascript
复制
const PI = 3.14;
PI // 3.14

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

let和const有以下共同点

1.只在声明的块级作用域内有效 2.不存在变量提升 3.存在暂时性死区

代码语言:javascript
复制
if (true) {
  n = 'abc'; // ReferenceError
  let n;
}

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 在代码块内,使用let 或 const命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

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

代码语言:javascript
复制
if(true) {
  let a = 10;
  var a = 1;
}
//Identifier 'a' has already been declared
代码语言:javascript
复制
if(true) {
  let a = 10;
  let a = 1;
}
//Identifier 'a' has already been declared
代码语言:javascript
复制
if(true) {
  const a = 10;
  let a = 1;
}
//Identifier 'a' has already been declared
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档