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 相关文章推荐
JavaScript比较两个对象是否相等的方法
Feb 06 Javascript
js实现上传图片预览的方法
Feb 09 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
Apr 20 Javascript
微信小程序 本地存储及登录页面处理实例详解
Jan 11 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
vue awesome swiper异步加载数据出现的bug问题
Jul 03 Javascript
JavaScript中break、continue和return的用法区别实例分析
Mar 02 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 Javascript
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
编写v-for循环的技巧汇总
Dec 01 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中的global
2014/08/19 PHP
php图片上传类 附调用方法
2016/05/15 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP asXML()函数讲解
2019/02/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
vue项目引入字体.ttf的方法
2018/09/28 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
python学生管理系统的实现
2020/04/05 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
详解Scrapy Redis入门实战
2020/11/18 Python
python 实现控制鼠标键盘
2020/11/27 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
联谊活动策划书
2014/01/26 职场文书
店面出租协议书范本
2014/11/28 职场文书
检讨书范文2000字
2015/01/28 职场文书
工会积极分子个人总结
2015/03/03 职场文书
2015入党自传书范文
2015/06/26 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL