let是ES6新增的命令。 做用:声明变量。 相似于:var。 与var的区别:使用let声明的变量,只在其所在的代码块内有效。javascript
声明变量:能够用var,也能够不用var。 是否容许变量提高:容许。 是否容许重复声明同一个变量:容许。 变量的做用域:全局做用域、函数做用域。 在全局做用域中,不管是否使用var,定义的变量都是全局变量。 在函数做用域中,使用var定义函数局部变量,不使用var定义全局变量。 全局变量全局可用,函数局部变量在函数内可用。 代码块:用{}栝起来的代码片断。java
let声明的变量,只在其所在其所在的代码块内有效。 let不存在变量提高。 let不容许重复声明。 let不容许在函数的一级做用域内从新声明参数。 let存在的块级做用域,它声明的这个变量或“绑定”这个区域,造成“暂时性死区”,使其再也不受外部影响。 就是说,一个变量,不管其在外部是否声明,只要在某个块级做用域内使用let从新声明了,那么在这个块级做用域内该变量在声明前是不能够使用的。bash
for循环的计数器 let声明的循环变量i只在本轮循环有效,每一次循环的i都是一个新变量。特别的JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,是在上一轮循环的基础上进行计算。 另外,for循环设置循环变量的那部分是一个父做用域,而循环体内部是一个单独的自做用域。函数
<script type="text/javascript">
var a = 1;
console.log(a); // 1
b = 2;
console.log(b); // 2
console.log(c); //undefined
var c = 3;
var a = 4;
function showA(){
console.log(a);
d = 5;
console.log(d);
}
showA(); // 4,5
console.log(d); //5
function showB(){
console.log(b);
var e = 6;
console.log(e);
}
showB(); //2,6
console.log(e); //报错
</script>
复制代码
<script type="text/javascript">
{
var a = 1;
let b = 2;
}
console.log(a); //1
console.log(b); //报错
</script>
复制代码
<script type="text/javascript">
var a = [];
for(var i = 0; i < 10; i++){
a[i] = function(){
console.log(i);
}
}
a[6](); //10
</script>
复制代码
<script type="text/javascript">
for(let i = 0; i < 10; i++){
}
console.log(i); //报错
</script>
复制代码
<script type="text/javascript">
var a = [];
for(let i = 0; i < 10; i++){
a[i] = function(){
console.log(i);
}
}
a[6](); // 6
</script>
复制代码
<script type="text/javascript">
for(let i = 0; i < 3; i++){
let i = 'abc';
console.log(i); //abc,abc,abc
}
</script>
复制代码
<script type="text/javascript">
console.log(a); //报错
let a = 1;
</script>
复制代码
<script type="text/javascript">
let a = 1;
console.log(a); //1
{
a = 2;
let a;
console.log(a); // 报错
}
</script>
复制代码
<script type="text/javascript">
let a = 1;
console.log(a); // 1
let a = 2;
console.log(a); //报错
</script>
复制代码
<script type="text/javascript">
function showName(name){
let name = 'sunny';
console.log(name);
}
showName('lily'); // 报错
</script>
复制代码
<script type="text/javascript">
function showName(name){
console.log(name);
{
let name = 'sunny';
console.log(name);
}
}
showName('lily'); //lily,sunny
</script>
复制代码