ES6--let

来源:互联网 发布:c语言visit函数 编辑:程序博客网 时间:2024/05/22 07:49

1.基本概念

let命令:用来声明一个变量,和var非常类似

2.用let声明变量的注意事项

1)使用let声明的变量,该变量只在命令所在的代码块内有效

{let a=1;var b=2;console.log(a)//正确}console.log(a)//报错console.log(b)//正确

2)使用let命令声明的变量在预解析的时候不会被提升
因为存在预解析,所以a可以被访问到,是undefined

console.log(a);//undefinedvar a=1;

下面则会直接报错

console.log(a);//报错let a=1;
typeod c;//报错let c=10;
let f=10;function fn(){  f=7;  let f=2;//暂时性死区}fn();//报错

3)let不允许在同一个作用域下声明已经存在的变量,以下都会报错

var a=1;let a;
let b=1;let b=2;

4.let在for循环中的应用

1)看一道常见的面试题

<button>1</button><button>2</button><button>3</button><button>4</button><button>5</button><script>var btns=document.querySelectorAll("button");for(var i=0;i<btns.length;i++){  btns[i].onclick=function(){   console.log(i);  }}</script>

执行上面代码,发现无论点击哪个按钮,最终都会打印5,可以做下面的修改

for(var i=0;i<btns.length;i++){  btns[i].index=i;  btns[i].onclick=function(){   console.log(this.index);  }}

也可以使用闭包的形式

for(var i=0;i<btns.length;i++){  (function(i){      btns[i].onclick=function(){        console.log(i);      }   })(i)}

现在可以使用let可以直接解决这个问题

for(let i=0;i<btns.length;i++){  btns[i].onclick=function(){   console.log(i);  }}

2)在循环语句之内是一个父作用域,在循环体之中是一个子作用域

for(let i=0;i<3;i++){   let i=10;   console.log(i);//10说明不收外面for循环的影响}console.log(i);//报错,未被定义。说明for循环只在循环内起作用
原创粉丝点击