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 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
jQuery实现可移动选项的左右下拉列表示例
Dec 26 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
JavaScript基础之this详解
Jun 04 Javascript
详解bootstrap导航栏.nav与.navbar区别
Nov 23 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
Dec 20 Javascript
jquery检测上传文件大小示例
Apr 26 jQuery
js实现随机点名
Jan 19 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
php.ini 中文版
2006/10/28 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python用requests实现http请求代码实例
2019/10/31 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
python异步Web框架sanic的实现
2020/04/27 Python
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
土建施工员岗位职责
2014/07/16 职场文书
普通党员个人整改措施
2014/10/27 职场文书
租车协议书范本2014
2014/11/17 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript