最近工作上真爽,不用加班,晚上下班以后也就没什么事情了,这也是我能想起来写博客的原因之一。
做前端开发这一行的,大多都是半路出身,都知道IT工资高,所以很多人都是转行过来的,报个培训班,培训个半年就出来上岗了。在半年的时间内从一个门外汉到完全掌握这么技术,其实挺难的。所以,培训机构一般都把重点放在了上手,基础大概讲一下,直接开始上项目,让你在项目实战上学习。
我之前也是培训机构出来的,在这里就不说名字了,免去打广告的嫌疑。培训结束后,给任务,就可以做,但是对于基础的js语法,掌握的不够扎实。
之前在网上看过阮一峰老师的博客讲的ES6语法很好,为了让自己对ES6语法有更深入的了解,买了阮一峰老师的这本书,ES6标准入门,好好学习一下。
好了,废话不多说了,进入正题。
let命令
用法类似于var,用于声明变量,具有以下特点:
1、块级作用域;
2、不存在变量提升;
3、暂时性死区;
4、不允许重复声明。
a) 块级作用域:顾名思义,let所声明的代码只在其所在的代码块内有效。
{
var a = "半斤";
let b = "八两";
}
console.log(a) //半斤
console.log(b) //ReferenceError: b is not defined
b) var存在变量提升,变量在声明之前可以使用,值为undefined,而let不存在,必须在声明后使用,不然会报错。
console.log(a); //undefined
var a = "半斤";
console.log(b); //ReferenceError: b is not defined
let b = "八两";
c) let命令声明变量之前,该变量都是不可用的,在语法上称为暂时性死区(temporal dead zone,简称TDZ)。
var a = "半斤";
if(true){
a = "八两"; //ReferenceError: a is not defined
console.log(a); //ReferenceError: a is not defined
let a;
console.log(a); //undefined
a = "八两";
console.log(a); //八两
}
d) 不允许在相同作用域内重复声明同一个变量。
(function () {
let a = "半斤";
var a = "八两"; //SyntaxError: Identifier 'a' has already been declared
})()
(function () {
let a = "半斤";
let a = "八两"; //SyntaxError: Identifier 'a' has already been declared
})()
(function (arg) {
let arg = "半斤"; //SyntaxError: Identifier 'arg' has already been declared
})()
这就是ES6的let命名,与var还是有很大区别的,在看书之前,我只知道let的块级作用域,与for循环一起使用很有效,看了书现在才有了更深刻的认识。你之前是不是也没有认识到这么多呢???
如有疑问和错误,欢迎留言讨论和指正。