ES5中仅有全局做用域和函数做用域,没有块级做用域,会形成内层变量覆盖外层变量,例如:函数
<script> var time = new Date(); function fun(){ console.log(time); if(false){ var time = "Hello world"; } }; fun();//undefined </script>
let实际上为js新增了块级做用域。spa
<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) 当即执行函数:code
ES5: (function(){}())blog
ES6:{ }ip