对ES6中let与const命令初步了解
来源:互联网 发布:软件测试适用范围 编辑:程序博客网 时间:2024/06/15 03:51
最近看了阮一峰的《ECMAScript6入门》 ,对第一章做一些记录
1. let命令
ES6 新增的关键字,用法就是用于声明变量,和 var 类似;区别在于声明的变量是局部的,只在 let 所在的代码块内有效。
var a = [];for (var i = 0; i < 10; i++) { a[i] = function () {console.log(i); };}a[6](); // 10var a = [];for (let i = 0; i < 10; i++) { a[i] = function () {console.log(i); };}a[6](); // 6由于ES5中不存在块级作用域,变量i是var声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的function在运行时,会通过闭包读到这同一个变量i,导致最后输出的是最后一轮的i的值,也就是10。而如果使用let,声明的变量仅在块级作用域内有效,最后输出的是6。
同样的
for (let i = 0; i < 3; i++) { //子作用域 let i = 'abc'; //另一个子作用域 console.log(i);}// abc// abc// abc 因为两个i其实不一样,所以第二个i只会输出该作用域下的值
只要块级作用域内,存在 let 命令,它声明的变量就是绑定(binding)在这个区域,不受外部影响
var foo = 123 // 全局变量if (true) { console.log(foo) // ReferenceError: foo is not defined ,变量不提升,与var的区别之一 let foo}
var tmp = 'abc';if (true) {// TDZ开始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ结束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123}
所以要养成良好的变成习惯,变量声明之后再使用。
块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
// IIFE 写法(function () { var tmp = ...; ...}());// 块级作用域写法{ let tmp = ...; ...}
const 声明的是一个只读的常量。一旦声明值便不可以改动。因为 const 声明的值并不能改变,所以声明的时候必须初始化
const PI = 3.1415926console.log(PI) // 3.1415926PI = 3 // TypeError: Assignment to constant variable.const MAX // SyntaxError: Missing initializer in const declarationconst 的特点和 let 一样,只在声明的块级作用域中有效; const 声明的变量也不会提升,所以也是存在 TDZ 的;不能重复声明
再举个例子
const a = [];a.push('Hello'); // 可执行,可写a.length = 0; // 可执行a = ['Dave']; // 报错 ,赋值不行
ES5 只有两种变量声明的方法: var 和 function 关键字;ES6 却还添加了 let , const , import , class ;所以 ES6 一共有6种声明变量的方法。
阅读全文
1 0
- 对ES6中let与const命令初步了解
- ES6---let与const
- ES6-let 与 const
- es6 let 和 const 命令
- ES6 let和const命令
- ES6之 let与const
- ES6(一)const与let
- ES6中let命令
- ES6入门let与const命令(一)
- JavaScript ES6中const、let与var的对比详解
- ES6学习--let和const命令
- ES6(一) let和const命令
- es6学习-let和const命令
- ES6学习笔记: let 和 const 命令
- ES6 之 let 和 const 命令
- es6-1(let和const命令)
- ES6之let和const命令
- ECMAScript 2015(ES6):let和const命令
- LVM磁盘管理
- 如何实现iOS热更新
- Jsp动态网页开发
- 企业网站上演“变形计” 中企动力剑指“商业入口”
- wamp2.5配置域名
- 对ES6中let与const命令初步了解
- 编程十诫
- *hdu
- linux中fork()函数详解
- Openstack无法删除云硬盘
- linux怎样查看当前系统版本是UBuntu还是Cent OS?
- Grails从表单获取数据并存储
- 免费的论文查重网站
- TCP与UDP的区别