ES6特性之:let和const

只能赋值一次的常量 const

ES6之前,我们只有一种声明变量的方式:var,不能声明常量,如果我们有一些不变的值,比如一些固定的错误代码,我们可能会这样去声明,把它们当做常量来使用:

var ERROR_NETWORK = 0;
var ERROR_NO_RESPONSE = 1;
var ERROR_DATA_FORMAT = 2;

我们不希望其他代码去改变这些变量的值,但是其实是没有办法做到的。

在ES6里,终于新增了const关键字,可以用于声明真正的常量啦:

const ERROR_NETWORK = 0;
const ERROR_NO_RESPONSE = 1;
const ERROR_DATA_FORMAT = 2;

如果你尝试对声明的常量重新赋值,则我们的开发工具的代码检查会报错,或者运行时也会报错:

错误

作用域更清晰的变量 let

我们使用var声明变量的时候,在同一个作用域中,可以重复声明一个变量:

var a = 1;
var a = 2;

console.log(a); // 结果:2

这个例子还好,我们一眼就能看出结果是2。那我们再来看一下下面这个例子:

var i = 100;

for(var i = 0; i < 22; i++) {
   //...
}

console.log(i);   // 100? 22?

其实常理来说,我们希望这里例子中输出结果是100。但是,其实这里输入的会是22。因为在for循环中声明的同名变量i并不会跟我们想象中似的,作用域只在for循环体中,它会影响到循环外的作用域。

所以,为了避免这种副作用,我们通常就只能声明一个其他名字的变量来解决了。

在ES6中,现在引入了一个新的关键字let,来更好的处理以上我们遇到的问题。

  • 在同一个作用域中,一个变量名只能声明一次。
let a = 1;
let a = 2; //错误
  • 变量只在自己所处的块(block)中起作用
let a = 1;

{
  //这里是一个block,所以可以再次声明变量a
  let a = 2;
  console.log(a); // 结果:2
}

console.log(a); // 结果:1

所以,回过头来再看上面那个循环的例子,通过使用let声明变量i后,就可以达到我们设想的效果了:

let i = 100;

for(let i = 0; i < 22; i++) {
   //...
}

console.log(i);   // 100

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

C++中关于指针初始化和使用NULL的理解

1、严禁使用未被初始化的指针:C++创建指针的时候,只分配存储地址的内存,并不会分配存储数据的内存,所以指针可能指向任何位置。    (1)使用解除运算符(*)...

28910
来自专栏企鹅号快讯

MySQ基础入门系列之——字符与日期数据处理

今天这一篇分享MySQL中的字符串处理工具与日期时间处理,这一部分内容虽然看似不多,但是往往是输出处理中的的痛点。 我的MySQL数据库中已经建好了一个包含两列...

1900
来自专栏IT派

JavaScript 打怪升级 —— 把业务逻辑当练习题做

开发项目和出没社区有一段时间了,会遇上一些比较有印象业务需求。这些业务需求,可能是自己开发项目遇上的,可能是在社区看到的业务需求,或者其他情况接触到的需求,但是...

823
来自专栏机器学习算法与Python学习

浅谈Python如何处理字符串

本次内容是以以Python 2.7为例来进行讨论的,Python 3x与其类似。 1. Python文件编码 在文件头部一般声明为UTF-8: # encod...

3688
来自专栏python小白到大牛

这里是最全面的 python 字符串拼接总结,赶快收藏!

在 Python 中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅。

1783
来自专栏吴裕超

es6 Object的几个新方法

ES5 的 Object.preventExtensions 则可以阻止给对象添加新属性

1053
来自专栏数据结构与算法

浅谈ST表

ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到O(nlogn)预处理,O(1)查询最值 算法 ST表是利用的是倍增...

3815
来自专栏微信公众号:Java团长

理解Java的三大特性之封装

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据...

1082
来自专栏编程

让你比95%的人更懂Pythonic的内置模块:collections

Python的集合(collections)模块,为很多用其他方法很难实现的场景提供了解决方案。 本文我们将会学习该模块的抽象概念是如何产生的,日后处理不同问题...

2015
来自专栏北京马哥教育

grep、egrep正则表达式之初窥门径

何谓正则表达式 正则表达式,又称正规表示法、常规表示法 (Regular Expression,在代码中常简写为regex、regexp或RE),是一类字符所...

2198

扫码关注云+社区

领取腾讯云代金券