ES5中仅有全局作用域和函数作用域,没有块级作用域,会造成内层变量覆盖外层变量,例如:
<script> var time = new Date(); function fun(){ console.log(time); if(false){ var time = "Hello world"; } }; fun();//undefined </script>
let实际上为js新增了块级作用域。
<script> console.log("ES5:"); function fun(){ var num = 100; if(true){ var num = 200; }; console.log(num); } fun();//200 </script> <script type="module"> console.log("ES6:"); function fun(){ let num = 100; if(true){ let num = 200; }; console.log(num); } fun();//100 </script>
2) 立即执行函数:
ES5: (function(){}())
ES6:{ }