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 相关文章推荐
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
AngularJS基础 ng-dblclick 指令用法
Aug 01 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
在ABP框架中使用BootstrapTable组件的方法
Jul 31 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
从零开始实现Vue简单的Toast插件
Dec 03 Javascript
Vue项目安装插件并保存
Jan 28 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
微信小程序实现首页弹出广告
Dec 03 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python对象属性自动更新操作示例
2018/06/15 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
python多线程并发及测试框架案例
2019/10/15 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python的flask框架难学吗
2020/07/31 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
结构工程研究生求职信
2013/10/13 职场文书
优秀护士获奖感言
2014/02/20 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
个人债务授权委托书
2014/10/17 职场文书
招商银行收入证明
2015/06/17 职场文书