es6-let 和 const
ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。而let则实际上为JavaScript新增了块级作用域。用它所声明的变量,只在let命令所在的代码块内有效。
代码1:
window.onload=function(){ { var a = 1;//a的作用域则是onload函数内 let b = 10;//b的作用域仅限于代码块内 } console.log(a);//1 console.log(b);//报错,未定义变量b }
代码2:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>var let</title>
<style type="text/css">
html,body{margin: 0; padding: 0;font-size: 16px;}
a,span,b{display: block;height: 50px; padding: 5px 10px;text-align: center; background: #f00d66;float: left; margin-left: 20px;}
</style>
</head>
<body>
<div name="aa" style="padding: 20px 0; height: 90px;">
<a>A1</a>
<a>A2</a>
<a>A3</a>
<a>A4</a>
<a>A5</a>
</div>
<div name="aa" style="padding: 20px 0; height: 90px;">
<span>Span1</span>
<span>Span2</span>
<span>Span3</span>
<span>Span4</span>
<span>Span5</span>
</div>
<div name="aa" style="padding: 20px 0; height: 90px;">
<b>b1</b>
<b>b2</b>
<b>b3</b>
<b>b4</b>
<b>b5</b>
</div>
<script type="text/javascript">
function aa_var(){
var a=document.getElementsByTagName("a");
var len= a.length;
for(var i=0;i<len;i++){
a[i].onclick=function(){
console.log(i);//结果都是5
}
}
console.log(i);
}
function aa_let(){
var span=document.getElementsByTagName("span");
var len= span.length;
let i=0;//这个let i和var i效果是一样的,作用域都是函数aa_let内
for(let i=0;i<len;i++){
//这个let i作用域是for循环语句块内
span[i].onclick=function(){
console.log(i);//按顺序点击,结果:0、1、2、3、4
}
}
console.log(i);//如果不在for外面定义let i=0;会报错error;结果:0
}
function aa_let2(){
var b=document.getElementsByTagName("b");
var len= b.length;
let i=0;//这个let i和var i效果是一样的,作用域都是函数aa_let2内
for(i=0;i<len;i++){
b[i].onclick=function(){
console.log(i);//结果都是5
}
}
console.log(i);//结果:5
}
window.onload=function(){
aa_var();
aa_let();
aa_let2();
}
</script>
</body>
</html>
const
const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。
const i=3; i=0;//报语法错误,常量不能修改

浙公网安备 33010602011771号