forked from liang996/Javascript-Learning-notes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
js变量提升.txt
134 lines (83 loc) · 2.23 KB
/
js变量提升.txt
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
JavaScript 提升(Hoisting):提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为。
1.JavaScript 声明会被提升
在 JavaScript 中,可以在使用变量之后对其进行声明。
换句话说,可以在声明变量之前使用它。
例子 1 与例子 2 的结果相同:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
x=5; // 把 5 赋值给 x
document.getElementById("demo").innerHTML=x;// 查找元素,并且 在元素中显示 x
var x; // 声明 x
</script>
</body>
</html>
例子2:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x; // 声明 x
x=5; // 把 5 赋值给 x
document.getElementById("demo").innerHTML=x;// 查找元素,并且 在元素中显示 x
</script>
</body>
</html>
注意:为了理解这一点,您必须理解术语 "hoisting"。
Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为(提升到当前脚本或当前函数的顶部)。
2.let 和 const 关键字
用 let 或 const 声明的变量和常量不会被提升!
3.JavaScript 初始化不会被提升
JavaScript 只提升声明,而非初始化。
例子 1 与例子 2 的结果不相同:
例子 1
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
</script>
</body>
</html>//5 7
例子2:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
var y = 7; // 初始化 y
</script>
</body>
</html>x=5 y=undefined 结果是:5 undefined,因为JavaScript 只提升声明,而非初始化。初始化不会被提升。
这是
例子 2 也一样:
例子3,和例子2结果一样:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x = 5; // 初始化 x
var y;
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
y= 7; // 初始化 y
</script>
</body>
</html>//5 undefined ,由于 hoisting,y 在其被使用前已经被声明,但是由于未对初始化进行提升,y 的值仍是未定义。
4.在顶部声明您的变量!
Hoisting(对很多开发者来说)是 JavaScript 的一种未知的或被忽视的行为。
如果开发者不理解 hoisting,程序也许会包含 bug(错误)。
为了避免 bug,请始终在每个作用域的开头声明所有变量。
由于这就是 JavaScript 解释代码的方式,请保持这个好习惯。
严格模式中的 JavaScript 不允许在未被声明的情况下使用变量。