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 相关文章推荐
jquery下div 的resize事件示例代码
Mar 09 Javascript
JS数组的常见用法实例
Feb 10 Javascript
js光标定位文本框回车表单提交问题的解决方法
May 11 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
Sep 21 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
Jan 05 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 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上显示JFreechart画的统计图方法
2013/11/03 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP实现简单的计算器
2020/08/28 PHP
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python 2.7.14安装图文教程
2018/04/08 Python
python学习基础之循环import及import过程
2018/04/22 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python中的引用知识点总结
2019/05/20 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
python识别验证码图片实例详解
2020/02/17 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
个人自荐书
2013/12/20 职场文书
机械操作工岗位职责
2014/08/08 职场文书
Docker下安装Oracle19c
2022/04/13 Servers