博客说明git
文章所涉及的资料来自互联网整理和我的总结,意在于我的学习和经验汇总,若有什么地方侵权,请联系本人删除,谢谢!
let和const是es6新增长的两个关键字,主要做用是用来声明变量es6
用法github
let
声明的变量只在 let
命令所在的代码块内有效,不能重复声明数组
{ let a = 0; var b = 1; a //此时输出 0 b //此时输出 1 } a // 此时报错 ReferenceError: a is not defined b // 此时输出 1
经常使用环境微信
在使用for
循环时,适合使用let
命令网络
for (let i = 0; i < 10; i++){ ... } i // 此时报错 ReferenceError: i is not defined
在上述代码中,i
只在for
循环体之中有效,在循环体以外调用就会报错app
var a = []; for (var i = 0; i < 10; i++){ a[i] = function(){ console.log(i); } } a[8](); // 10
在上述代码中,变量i
是var
命令声明的,在全局范围内都有效,因此全局只有一个变量i
。函数
每一次循环,变量i
的值都会发生改变,而循环内被赋给数组a
的函数内部的console.log(i)
,里面的i
指向的就是全局的i
。也就是说,全部数组a
的成员里面的i
,指向的都是同一个i
,致使运行时输出的是最后一轮的i
的值,也就是 10。学习
var a = []; for (let i = 0; i < 10; i++){ a[i] = function(){ console.log(i); } } a[8](); // 8
若是使用let,声明的变量仅在块级做用域内有效,最后输出的是 8。ui
let不存在变量提高,var存在变量提高
var
命令会发生“变量提高”现象,即变量能够在声明以前使用,值为undefined
,let
命令改变了语法行为,它所声明的变量必定要在声明后使用,不然报错。
console.log(a); //ReferenceError: a is not defined let a = "apple"; console.log(b); //undefined var b = "banana";
上述代码中,b
在脚本开始运行时就存在了,可是尚未进行赋值,因此返回undefined
。a
在变量声明以前不存在,因此会报错。
用法
const
声明一个只读变量,声明以后不容许改变
const PI = "3.1415926"; PI // 此时输出3.1415926 PI = 3; // TypeError: Assignment to constant variable. const MY_AGE; // 此时报错SyntaxError: Missing initializer in const declaration
const
一旦声明必须初始化,不然会报错,只声明不赋值也会报错
只要代码块中包含let或者const,它所声明的变量就会绑定这个区域,不会再受外部的影响
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError const tmp; }
暂时性死区的范围
在代码块内,使用let
或者const
命令声明变量以前,该变量都是不可用的。
if (true) { // TDZ开始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError let tmp; // TDZ结束 console.log(tmp); // undefined tmp = 123; console.log(tmp); // 123 }
感谢
万能的网络
菜鸟教程
阮一峰的es6语法教程