复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
只在命令行所在的代码块中有效,使用let声明的变量在域解析的时候不会被提升
严格模式
'use strict'
let定义变量没有变量的提升(没有预解释)
console.log(a);//undefined 只声明未定义
var a=1;
console.log(a); //1
console.log(a);
a is not defined
let a=1;
console.log(a);//1
var b=12;
var b=13;
function b(){
console.log(b);
}
console.log(b);//13
b()
//报错
let b=12;
let b=13;
function b(){
console.log(b)
}
console.log(b);
报错:Identifier 'b' has already been declared
注意:let定义得变量不能重复定义(不管函数还是let定义得变量都不可以得)
console.log(A);
报错:A未定义
let A=10;
let A=12;
//报错'A' has already been declared
问题:上面为什么包下面错误呢?
虽然不进行预解释,但是代码执行前上来也是先将定义得变量提前过滤一遍的,一旦
发现不合法就直接报错的,代码也不会执行的
const 定义的是静态变量,是不能修改的,且必须赋值
不赋值就会报错:Missing initializer in const declaration
const g=10;
g=20; 不可以修改Assignment to constant variable
注意:不可以重复声明的
const g=20;//Identifier 'g' has already declared
let a=1;
const a=2;
//Identifier 'a' has already declared
注意:不管是动态变量还是静态变量,都是不可以重复声明的
let a=1;
{
const a=2;
}
这样就不会报错了,里面的是私有作用域,不是同一个a
块级作用域
就是大括号,大括号包起来的都属于块级作用域
{} 是一个私有作用域,块级作用域
let a=10;
if(a){
console.log(a);
//报错, a is not undefined
let a=12;
console.log(a);若放在下面就不报错
}
注意:
let oLis=document.getElementsByTagName("li");
for(var i=0;i<oLis.length;i++){
oLis[i].onclick=function(){
console.log(i);
//这样输出的都是4
}
}
for(let i=0;i<oLis.length;i++){
oLis[i].onclick=function(){
console.log(i);
//这样输出就都是正确的
}
}
let a=0;
function fn(){
console.log(a);//报错
let a=0;
}
let a=0;
function fn(){
console.log(a);//不报错,输出0;
}
自执行函数
{
let a=100;
console.log(a);
}
let obj={};
//注意:eval将字符串转为对象的时候,一定要加上()
参考博客:https://blog.csdn.net/hdchangchang/article/details/78265351
最后
以上就是大气小蘑菇最近收集整理的关于let和const总结的全部内容,更多相关let和const总结内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复