undefined

let和const

let命令

用来声明一个变量,和var类似

注意事项:

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

1
2
3
4
5
6
7
{
let a=1;
var b=2;
console.log(a); //可以打印出
}
console.log(a); //打印不出来
console.log(b); //可以访问到b

2、使用let命令声明的变量在域解析的时候不会被提升。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
console.log(a);   //可以打印出a    因为a域解析的时候被提升了
var a=1;

console.log(b); //报错,b未定义, 因为b域解析的时候不会被提升
let b=2;

typeof c; //报错
let c=10;

let f=10;
function fn(){
f=7; //暂时性死区
let f=2;
}

fn();

3、let不允许在同一个作用于下声明已经存在的变量

1
2
3
4
5
6
var a=1;
let a; //报错


let b=1;
let b=2; //报错

let在for循环中的应用

1
2
3
4
5
6
7
var btns =document.querySelectorAll('button');

for (var i=0;i<btns.length;i++){
btns[i].onclik=function(){
console.log(i);
}
} //问题:每次切换的时候,显示最大的那个数

解决方法一

1
2
3
4
5
6
7

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

解决方法二

1
2
3
4
5
6
7
8
//函数表达式,把i当作参数传到函数表达式当中
for(var i=0;i<btns.length;i++){
(function(i){
btns[i].onclick=function(){
console.log(i);
}
})(i)
}

解决方法三:用let

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

注意:let声明的变量在循环语句之内是一个父作用域,在循环体中是一个字作用域

1
2
3
4
5
for (let i=0;i<3;i++){
let i=10;
console.log(i); //每次打印10 不受循环语句中的i影响
}
console.log(i); //未定义 let声明的变量i只在循环语句中有用,循环完成之后不会泄露到for循环所在的作用域之中

const

const命令同样有上面let的1、2、3条特点,第一:所声明的常量只在其所在的代码块内有效。第二:声明的常量不会被提升。第三:不能声明已经被声明过的常量或变量。除了这些,在使用const声明常量的时候需要注意两点:1、声明的时候必须赋值。2、声明的常量储存简单的数据类型时候不可改变其值,如果储存的是对象,那么引用不可以被改变,至于对象里面的数据如何变化,是没有关系的。

1
2
3
4
const obj={a:10};
obj.a=20;

console.log(obj);
觉得本站不错,请作者吃根辣条