微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

声明提升

                                            <table class="text"&gt;<tbody><tr class="li1"&gt;

<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 */

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐