爲什麼需要塊級作用域?
ES5只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景。
第一種場景,內層變量可能會覆蓋外層變量。
第二種場景,用來計數的循環變量泄露爲全局變量。
ES6的塊級作用域
let實際上爲javascript新增了塊級作用域。
-------------------------------------------第一種場景,內層變量可能會覆蓋外層變量。--------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一種場景</title>
<!--<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
</script>-->
<script type="text/javascript">
var time=new Date(); //獲取系統的當前時間
function fun(){
console.log(time);
if(false){
var time="hello world!";//內部的time把外面全局的time的地址給覆蓋了,但是隻有false時纔會運行time="hello world!",於是undefined
};
};
fun(); //輸出undefined
</script>
</head>
<body>
</body>
</html>
--------------------------------------------------第二種場景,用來計數的循環變量泄露爲全局變量。--------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第二種場景</title>
<!--<script src="js/traceur.js"></script>
<script src="js/bootstrap.js"></script>
<script type="text/traceur">
</script>-->
<script type="text/javascript">
var string="hello world!" ;
for(var i=0;i<string.length;i++){
console.log(string[i]);
};
console.log("循環結束");
console.log(i); //輸出12
</script>
</head>
<body>
</body>
</html>