前端之家收集整理的这篇文章主要介绍了
声明提升,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<table class="text"><tbody><tr class="li1">
<td class="ln"><pre class="de1">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
代码执行前处理,这意味着在任意地方声明变量都等同于在顶部声明——即声明提升。1.2特意强调了
函数定义,因为声明提升中,需要综合考虑一般变量和
函数。
在JavaScript中,一个变量名进入作用域的方式有 4 种:
Language-defined:所有的作用域默认都会给出 this 和 arguments 两个变量名(global没有arguments);
Formal parameters(形参):
函数有形参,形参会
添加到
函数的作用域中;
Function declarations(
函数声明):如 function foo() {};
Variable declarations(变量声明):如 var foo,
包括函数表达式。
函数声明和变量声明总是会被移动(即hoist)到它们所在的作用域的顶部(这对你是透明的)。
而变量的解析顺序(优先级),与变量进入作用域的4种方式的顺序一致。
一个详细的例子:
function testOrder(arg) {
console.log(arg); // arg是形参,不会被重新定义
console.log(a); // 因为
函数声明比变量声明优先级高,所以这里a是
函数
var arg = 'hello'; // var arg;变量声明被忽略, arg = 'hello'被执行
var a = 10; // var a;被忽视; a = 10被执行,a变成number
function a() {
console.log('fun');
} // 被提升到作用域顶部
console.log(a); //
输出10
console.log(arg); //
输出hello
};
testOrder('hi');
/*
输出:
hi
function a() {
console.log('fun');
}
10
hello
*/ 原文链接:https://www.f2er.com/note/422336.html