咱们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,咱们先来回顾一下。javascript
首先,在ES5中,咱们全部的变量都是经过关键字var来定义的。而这种变量呢,是存在弊端的,1.可重复声明;2.没法限制修改;3.没有块级做用域。而这三个弊端,可能会致使变量使用混乱、或者变量值受到污染。举一个最简单的例子:html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> </body> <script type="text/javascript"> var lis = document.querySelectorAll('li'); for (var i = 0; i < lis.length; i++) { lis[i].onclick = function () { console.log(i);//都是5 } } </script> </html>
上边这个例子呢,很明显,这个i呢,咱们在点击时,i其实已经循环完毕,在ES5中,想要解决这个问题,就只能用闭包了。关于闭包,等咱们讲JS进阶的时候,再详细讲一讲。java
<script type="text/javascript"> var lis = document.querySelectorAll('li'); for (var i = 0; i < lis.length; i++) { lis[i].onclick = (function (j) { return function () { console.log(j); } })(i) } </script>
而在ES6里边呢,咱们上述的三个弊端,已经有了比较好的解决方案。微信
在ES6中,首次提出了let和const两个关键字,let用来声明变量,不可重复声明,能够修改,有块级做用域;const用来声明常量,不可修改,一样不可重复声明,有块级做用域。闭包
let a = 10; let a = 20; //Uncaught SyntaxError: Identifier 'a' has already been declared const b = 10; const b = 20; //Uncaught SyntaxError: Identifier 'b' has already been declared const c = 10; c = 20;//Uncaught TypeError: Assignment to constant variable.
好了,这节课就说到这里,下一节课,咱们来说讲函数。函数
若是想跟着振丹继续学习,能够微信关注【振丹敲代码】(微信号:JandenCoding)学习
新博文微信同步推送,还附有讲解视频哦~spa
也可直接扫描下方二维码关注。code