---恢复内容开始---
Es6天天再更新,最近感觉有点落伍了,学习一下Es6的东西,作为笔记使用吧。
今天学习Let命令
学习的目标:
- 什么是let
- 为什么引入了let
- let使用有什么坑
目标1:
let是用来声明变量的
1 let a = "我就是个变量"; //声明字符串 2 let b = [1,2,3,4]; //声明数组 3 let c = { name: "名字", "age": 13} //声明字面量对象 4 let d = function () { ... } //声明函数 ....
目标2:为什么引入let
引入let命令的主要原因就是因为原来的var命令有缺陷,那就是变量提升。
ES5的javascript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。
如:
1 console.log( bianliang ) //undefined 2 var bianliang = "随便定义个变量"; 3 console.log( bianliang ) //随便定义个变量 4 5 function func() { //函数内部的情况也是一样的 6 console.log(bl); //undefind 7 var bl = "函数内部变量"; 8 console.log(bl); //函数内部变量 9 } 10 11 func();
为啥打印出来都是上边的结果呢?变量提升。实际代码执行结果是下边的内容。
1 var bianliang; 2 console.log( bianliang ) //undefined 3 bianliang = "随便定义个变量"; //顺序执行到这里才开始赋值,前边的变量必然是undefined 4 console.log( bianliang ) //随便定义个变量 5 6 function func() { //函数内部的情况也是一样的 7 var bl; //函数作用域内部变量提升,只声明,未赋值。 8 console.log(bl); //undefind 9 var bl = "函数内部变量"; 10 console.log(bl); //函数内部变量 11 } 12 13 func();
还有一种情况,就是函数变量提升,如下:
console.log(func1); //undefined console.log(func2); // function func2() { xxxx } var func1 = function() { } function func2 = function() { xxxx }
实际执行代码情况为:
var func1; //变量提升,但未赋值 function func2 = function() { xxxx }//函数变量提升了 console.log(func1); //undefined console.log(func2); // function func2() { xxxx } func1 = function() { }
还有同名变量的情况
1 var a = 123; 2 function a() { 3 console.log(‘456‘); 4 } 5 6 console.log(a) //123
为啥?函数提升优先级要高于变量提升。实际代码执行如下:
1 function a() { 2 console.log(‘456‘); 3 } 4 var a =123; 5 6 console.log(a); //123
好了,今天就先写到这里,有什么问题请留言,会尽快回复,有什么谬误的地方请指出,大家一块学习和提高。