ES6语法
let
声明变量
ES3.1声明变量方式 //var num = 100
(直接挂再window上。容易造成全局污染)
ES6声明变量方式 //let num = 100
(不会造成全局污染)
let不允许重复声明
let不会有声明提前 ?
在人为效果上是没有声明提前,而实则将数据保存到临时性死区中
Cannot access 'num' before initialization
//出现这种错误时表式将数据保存到临时性死区
{}
块级作用域
ES3.1局部作用域
(function(){
var num = 100;//通过匿名函数创建局部作用域
})()
ES6块级作用域
{
var num = 100;//与局部zuo'yong
}
const
常量声明
const不允许重复声明
const不会有声明提前
且常量不允许改变值 ?
//实则是不允许改变内存空间的地址。
const obj={};
obj.name = "jack"
console.log(obj)//{name:jack}
//const声明和赋值必须一次性完成,并且后期不允许改变存储空间地址
const abc;
abc = 123;
console.log(abc)//报错,
需要注意的闭包问题
碰到以下类似的问题需要注意自己的let是否用的到位;
如果不到位就会出现解决了一个问题还会产生其他的新问题。
//控制台有什么内容,怎样改动才可以输出0123456789
var arr = [];
for(var i = 0;i<10;i++){
arr[i] = function(){
console.log(i);
}
}
arr[0]()
arr[1]()
arr[2]()
arr[3]()
arr[4]()
arr[5]()
arr[6]()
arr[7]()
arr[8]()
arr[9]()
console.log(i)
//实际上这个问题分成两问
//1.是输出数组0-9这个比较简单,在开始循环中将var i 改成 let i 即可
//2.输出这i这个才是个掉坑的地方,当你将开始循环中将var i 改成 let i之后{}形成了一个块级作用域,
//再想输出i是就会报错
//解决方法添加立即执行函数
var arr = [];
for(var i = 0;i<10;i++){
(function(i){
arr[i] = function(){
console.log(i);
}
})(i)
}
arr[0]()
arr[1]()
arr[2]()
arr[3]()
arr[4]()
arr[5]()
arr[6]()
arr[7]()
arr[8]()
arr[9]()
console.log(i)