前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解ES6之—块级绑定

深入理解ES6之—块级绑定

作者头像
寻找石头鱼
发布2019-09-11 16:24:52
3620
发布2019-09-11 16:24:52
举报
文章被收录于专栏:寻找石头鱼寻找石头鱼

var声明与变量提升

使用var关键字声明的变量,无论其实际声明位置在何处,都会被视为声明于所在函数的顶部(如果声明不在任意函数内,则视为在全局作用域的顶部)。这就是所谓的变量提升。

块级声明

块级声明就是让所声明的变量在指定块的作用域外无法被访问。块级作用域在如下情况被创建:

  1. 一个函数内部
  2. 在一个代码块内部

let声明

let声明的语法和var的语法一致。基本可以使用let替换var,但会将变量的作用域限制在当前代码块中。let声明不会被提升到当前代码块的顶部。

禁止重复声明

如果一个标识符在代码内部被定义,那么在此代码块内部使用同一个标识符进行let声明就会导致抛出错误。

代码语言:javascript
复制
var count = 30;
let count = 40;//语法错误

如果在嵌套作用域内使用let声明一个同名的新变量,则不会抛出错误。

代码语言:javascript
复制
var count = 30;
if(condition){
    let count = 40;//不会抛出错误
}

常量声明

使用const进行常量的声明,它们的值在被设置完成之后就不能再被改变。正因为如此,所有的const变量都需要在声明时进行初始化

代码语言:javascript
复制
const MAX_ITEMS = 30;
const NAME;//语法错误

常量与let声明都是块级声明。与let声明类似,const声明会在同一作用域内定义一个已有变量时会刨除错误,无论改变了是var声明还是let声明。

代码语言:javascript
复制
var message = "HELLO";
let age = 25;

//二者都会抛出错误
const message = "Goodbye";
const age = 23;

let与const一个重大区别是:试图对之前用const声明的常量进行赋值会抛出错误,无论在严格模式还是非严格模式下

代码语言:javascript
复制
const maxItems = 30;
maxItems = 35;//抛出错误

但是如果const定义的常量如果是一个对象,它所包含的值是可以修改的。

代码语言:javascript
复制
var const person = {
    name = "cc"
}

//正常工作
person.name = "dd";

//抛出错误
person = {
    name = "aa";
}

全局块级绑定

let和const不同于var的另一个方面是在全局作用域上的表现。当在全局作用域上使用var时,它会创建一个新的全局变量,并成为全局对象(在浏览器中是window)的一个属性。这意味着使用var可能会无意覆盖一个已有的全局属性。

代码语言:javascript
复制
var RegExp = "hello";
console.log(window.RegExp);//"hello"

var ncz = "hi";
console.log(window.ncz);

在全局作用域上使用let或const,虽然会在全局作用域上创建新的绑定,但不会有任何属性被添加到全局对象上。这也就意味着你不能用let或const来覆盖一个全局变量,你只能将其屏蔽。

代码语言:javascript
复制
 let RegExp = "hello";
console.log(window.RegExp);//function
console.log(window.RegExp === RegExp);//false

const ncz = "hi";
console.log(ncz);//hi
console.log("ncz" in window);//false

随着更多的开发者迁移到es6上,一种替代方案变得更为流行,那就是在默认情况下使用const,并且只有在知道变量值需要被更改的情况下才使用let。其理论依据是大部分变量在初始化之后都不应当被修改,因为预期外的改动是bug的源头之一。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • var声明与变量提升
  • 块级声明
  • let声明
  • 禁止重复声明
  • 常量声明
  • 全局块级绑定
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档