为什么需要块级作用域?
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>