01变量-es6
# 变量
# 一、变量let
//1)不存在变量作用域提升,这样可以避免了我们还没声明变量就拿变量来用
console.log(a)
let a = 1//报错
//2)同一作用域的同一个变量不能够重复声明,避免我们重复声明变量
let a = 'hello world'
let a = 'hello world'//报错
//3)let声明的变量不会绑定到window
let a = 'hello swr'
console.log(window.a)//undefined
//4)let和代码块{}结合使用会形成块级作用域
{
let str = "hello"
}
console.log(str)//hello
//5)暂时性死区
//在代码块内,使用let命令声明变量之前,该变量都是不可用的
if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
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
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
[!cogs]
%accordion% 历史解说 %accordion%
JavaScript JScript ecma(计算机标准组织)
es5 ———— (2015以下都是es5)
es6 ———— (es2015)
es7
es8
es9
es10
es11(最新)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
%/accordion%
# 1、没声明变量
不存在变量作用域提升,这样可以避免了我们还没声明变量就拿变量来用
//es5
console.log(a);//安笛梵undefined
var a = 1;
//es6
console.log(a); //报错
let a = 1;
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2、常见报错(es5—es6)
# 1)
//es5
var a = 1;
function fn() {
console.log(a);//undefined
var a = 2;
}
fn();
//es6
let a = 1
function fn() {
console.log(a); //报错
let a = 2
}
fn()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn()//var fn()这个是变量提升 es6就会报错 es5就undefined
var fn = function () {
console.log(123);
}
1
2
3
4
2
3
4
# 2)
//es5
var a = 1
var a = 2
console.log(a);//这种是2
//es6
let a = 1
let a = 2
console.log(a);//报错
//es6
let a = 1
a = 2
console.log(a);//这种是2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3)
//es5
var a = 1
console.log(window.a);//这种是1
//es6
let a = 1
console.log(window.a); //undefined
1
2
3
4
5
6
7
2
3
4
5
6
7
# 4)
//es5
for (var i = 1; i < 10; i++) {
setTimeout(function () {
console.log(i);//10
}, 1000)
}
//es6
for (let i = 1; i < 10; i++) {
setTimeout(function () {
console.log(i);// 1 2 3 4 5 6 7 8 9
}, 1000)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 5)
//es5
function fn() {
a = 1
console.log(a); //1
}
fn()
//es6
function fn() {
a = 1
console.log(a);//报错
let a
}
fn()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3、块级作用域
花括号都是块级{}
let和代码块{}结合使用会形成块级作用域
//es5
{
var a = 1
console.log(a);//1
}
{
var a = 1
console.log(window.a);//1
}
//es6
{
let a = 1
console.log(a);//1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编辑 (opens new window)
上次更新: 2022/04/24, 13:33:34