ES5用var声明变量时有一些缺陷,ES6新增了let声明变量的标识符,const常量来弥补var的不足
一,let的特性
1,与var类似,但没有隐式提前-若没有声明,不能先访问变量
console.log(a) //报错
let a=10
2,只能在let声明的代码块内使用
for(let a=0;a<10;a++){
console.log(a)//0,1,2,3,4,5,6,7,8,9
}
console.log(a)//报错
3,不能重复声明
let a=100;
let a=200;//报错
二,const
1,具有let的所有特性
2,不能再次赋值
const a=100
a++ //报错,不可修改常量
console.log(a+1) //可取值,不可修改值
3,必须在声明时初始化
const a; //报错
4,暂时性死区
var PI="a"
if(true){
console.log(PI) //报错,相当于用const时就把最近的代码块封锁起来,且不能提前声明,故报错
const PI=3.21
}
三,浏览器的另一不足-->在if的代码块中的变量声明()
console.log(a) //undefined
console.log(fn) //undefined
if(true){ //if的{}没有作用域之说,当判断条件为真的时候,var会提前声明,并初始化为undefined
var a=100
function fn(){}
}
console.log(a) //undefined
console.log(fn) //undefined
if(false){ //当判断条件为假的时候,var也会提前声明,并初始化为undefined,此时就背离代码本身的逻辑,产生了漏洞
var a=100
function fn(){}
}
四,严格模式下 --->if里面尽量使用let声明变量
"use strict" //严格模式下
console.log(a) //undefined
console.log(fn) //报错
if(false){ //false情况下
var a=100
function fn(){}
}
"use strict" //严格模式下
console.log(a) //undefined
console.log(fn) //报错
if(true){ //true情况下
var a=100
function fn(){}
}
//由上面就可以看出,在if中尽量用let声明变量,而不是用var
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。