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 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
用javascript实现在小方框中浏览大图的代码
Aug 14 Javascript
JavaScript toFixed() 方法
Apr 15 Javascript
获取body标签的两种方法
Oct 13 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
canvas绘制爱心的几种方法总结(推荐)
Oct 31 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php笔记之:AOP的应用
2013/04/24 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
python编程开发之日期操作实例分析
2015/11/13 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
安全检查与奖惩制度
2014/01/23 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
开学寄语大全
2014/04/08 职场文书
经管应届生求职信范文
2014/05/18 职场文书
校庆口号
2014/06/20 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs