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 相关文章推荐
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
javascript oop开发滑动(slide)菜单控件
Aug 25 Javascript
浅析Cookie中的Path与domain
Dec 18 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
JavaScript制作简单分页插件
Sep 11 Javascript
Node.js读取文件内容示例
Mar 07 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
vue动态删除从数据库倒入列表的某一条方法
Sep 29 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
May 10 jQuery
layui多图上传实现删除功能的例子
Sep 23 Javascript
vue基本使用--refs获取组件或元素的实例
Nov 07 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 Javascript
详解如何在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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python中的django是做什么的
2020/07/31 Python
python ssh 执行shell命令的示例
2020/09/29 Python
行政管理毕业生自荐信
2014/02/24 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
倡议书范文
2014/04/16 职场文书
售后客服个人自我评价
2014/09/14 职场文书
开业庆典致辞
2015/08/01 职场文书
员工担保书范本
2015/09/22 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android