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修改属性值实例代码(设置属性值)
Jan 06 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
Jan 11 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
Apr 24 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
Jul 12 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 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
基于文本的搜索
2006/10/09 PHP
建立文件交换功能的脚本(二)
2006/10/09 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
购物车选中得到价格实现示例
2014/01/26 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
原生js实现日期计算器功能
2017/02/17 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
基于Vue实现图书管理功能
2017/10/17 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
一篇不错的Python入门教程
2007/02/08 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
彻底搞懂Python字符编码
2018/01/23 Python
Python多继承顺序实例分析
2018/05/26 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
财务经理岗位职责
2013/11/09 职场文书
高二地理教学反思
2014/01/24 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
会计学习心得体会
2014/09/09 职场文书
2014年保洁工作总结
2014/11/24 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python