let和const --ES6特性学习笔记(一)
一、let
1、变量作用域
ES6新增了
let
命令,用来声明变量。它的用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效。
eg1:
if(2>1){ let b=1; var a = 1; }console.log(a);//1
console.log(b);//ReferenceError: b is not defined
--let申明的变量在区块外部调用保错,b只在区块内生效
eg2:使用循环+延迟测试let作用域
for(var c = 0;c<2;c++){ setTimeout(function(){ console.log(c) },100) } //打印出两个2for(let c = 0;c<2;c++){
setTimeout(function(){
console.log(c)
},100)
}
//打印出0,1
--let在每次的for循环代码块内有效。var出的变量在全局范围内都有效
2、let变量提升?
console.log(e1)//undefined console.log(e2)//ReferenceError: can't access lexical declaration `e2' before initializationvar e1 = 0;
let e2=1;
--e1的变量声明提升,输出undefined. e2则未被提升,输出需先定义
3、暂时性死区(在使用let、const声明的区块内,使用到这些命令什么的变量未被定义时会报错
eg:
var p1=1;if(2>1){
p1 = 2; //ReferenceError: can't access lexical declaration `p1' before initialization
let p1;
}
--p1使用了let定义,不能在该区块先使用
4、同作用域重复申明错误
if(2>1){ var p2 = 1; let p2 = 2;//SyntaxError: redeclaration of var p2 }
二、const(同java中final定义的变量
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const具备和let1~4点相同的特性
1、const申明的变量需赋值
const p3;//SyntaxError: missing = in const declarationp3 = 1
2、const申明的变量不能被修改
const p4 = 1;p4 = 2;//TypeError: invalid assignment to const `p4'
标题:let和const --ES6特性学习笔记(一)
作者:hugh0524
地址:https://blog.uproject.cn/articles/2016/06/20/1466406834182.html
0 0