ES6入门教程之let和const命令详解


Posted in Javascript onMay 17, 2017

前言

在javascript中,我们都知道使用var来声明变量。javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量。

函数级作用域会导致一些问题就是某些代码块内的变量会在全局范围内有效,这我们是非常熟悉的:

for (var i = 0; i < 10; i++) {
 console.log(i); // 0,1,2...,9
}
console.log(i); //10

if(true){
 var s = 20;
}
console.log(s); //20

在es6中增加了let(变量)和const(常量)来声明变量,使用的是块级作用域,变量声明只在代码块内有效,下面来看看详细的介绍:

let命令

ES6新增了let命令用于声明变量。它的用处和var很相似,只不过let所声明的变量只在let命令所在的代码块内有效。

看下下面代码:

{
  let a = 10;
  var b = 9;
 }
 alert( a ); // ReferenceError: a is not defined
 alert( b ); //9

再看看下面代码:

var a = [];
 for(var i = 0; i < 10; i++) {
  var c = i;
  a[i] = function() {
   console.log( c );
  };
 }
 a[6](); //9

而如果使用let声明的话,最后输出的值是“6”。代码如下:

var a = [];
for (var i = 0; i < 10; i++) {
  let c = i;
  a[i] = function() {
   console.log( c );
  };
}
a[6](); //6

此外,let声明的变量不会提升。看下下面的代码片段。

function do_someting() {
  console.log( a ); //ReferenceError
  let a = 2;
 }

最后,let不允许在相同的作用域内,重复声明同一个变量。

// 报错
 {
  let a = 10;
  var a = 1;
 }

 // 报错
 {
  let a = 10;
  let a = 1;
 }

let实际上是JavaScript增加的块级作用域。

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

上面代码有两个代码块,都声明了n变量,运行后输出的是6。这表明外层代码块不受内层代码块的影响。如果,改成使用var定义变量n的话,最后输出的就是10.

另外,ES6还规定,函数本身的作用域在其所在的代码块作用域之内。

function f() { console.log("I am outside"); }
 (function () {
  if (false) {
   //重复声明一次函数f
   function f() {
    console.log("I am inside");
   }
  }

  f();
 }());

上面的代码片段,在ES5中运行会得到“Iam inside”, 但是在ES6中运行,则会得到“Iam outside”。

const命令

const是用来声明常量的。一旦声明,其值就不能改变。

const PI = 3.1415;
 console.log( PI ); //PI

 PI = 3;
 console.log( PI ); //3.1415

 const PI = 3.1;
 console.log( PI ); //3.1415

有一点需要我们注意的是,对常量的重复定义不会报错,它只会默默的失败。

const的作用域与let命令相同:即只在声明所在的块级作用域内有效。

if(condition) {
  const MAX = 5;
 }

 // 常量MAX在此处不可见(或者说不可得)

此外,const常量也不可重复声明。

var message = "Hello!";
 let age = 25;

 //以下两行都会报错
 const message = "Goodbye!";
 const age = 30;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
Apr 06 Javascript
JavaScript必知必会(七)js对象继承
Jun 08 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
基于vue监听滚动事件实现锚点链接平滑滚动的方法
Jan 17 Javascript
写一个Vue Popup组件
Feb 25 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
vue中英文切换实例代码
Jan 21 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
详解如何在Angular中快速定位DOM元素
May 17 #Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 #Javascript
AngularJS自定义指令实现面包屑功能完整实例
May 17 #Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 #jQuery
AngularJS使用拦截器实现的loading功能完整实例
May 17 #Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 #Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 #Javascript
You might like
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php文件缓存类汇总
2014/11/21 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
js 金额文本框实现代码
2012/02/14 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
python下MySQLdb用法实例分析
2015/06/08 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
python装饰器代码深入讲解
2021/03/01 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
思想政治自我鉴定
2013/10/06 职场文书
应付会计岗位职责
2013/12/12 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
学习型党组织心得体会
2014/09/12 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
Tomcat弱口令复现及利用
2022/05/06 Servers
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python