JavaScript ES6学习之新增变量let
一、基本知识
let是JavaScript ES6中新增的一个用于声明变量 的关键字。
(1)特点:
①let只对变量所处的块级有效:(这里的块级就比如一个大括号)
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HOME</title>
</head>
<body>
<script type="text/javascript">
if(true){
var userName = '崇志';
let num = 100;
}
console.log(userName);
console.log(num);
</script>
</body>
</html>
从上图,我们可以发现:var和let初始化语句都在if{}内,而它们的执行语句都在if{}外,由于let只对变量所处的块级有效,所以只有var声明的userName执行了出来而let声明的num显示没有被定义到。
②let不存在变量提升
let必须要先声明才能使用。
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HOME</title>
</head>
<body>
<script type="text/javascript">
console.log(userName);
let userName = '崇志';
</script>
</body>
</html>
就会显示如下报错:应该先声明后执行。
③let具有暂时性死区特性
我们来看下面这段代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HOME</title>
</head>
<body>
<script type="text/javascript">
var temp=12345;
if(true){
let temp = 'chongzhi';
}
console.log(temp);
</script>
</body>
</html>
效果图如下:
我们发现:虽然有两个temp,但是最后执行的是第一个temp的值12345,这是因为let具有暂时性死区特性,第二个temp会和if{}整体进行绑定。
二、经典例题:
(1)输出i的值。
var arr = [];
for(var i = 0; i < 2; i++)
arr[i] = function(){
console.log('i='+i);
}
arr[0]();
arr[1]();
代码执行效果图:
解决关键:变量i是全局的,函数执行输出的都是全局作用域下的值。
(2)输出i的值。
let arr = [];
for(let i = 0; i < 2; i++){
arr[i] = function(){
console.log('i='+i);
}
}
arr[0]();
arr[1]();
代码执行效果图:
解决关键:每一次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,函数执行时输出的是自己上一级循环产生的块级作用域下的i值。
还没有评论,来说两句吧...