作用域

/*全局作用域
1.全局作用域在页面打开时被创建,页面关闭时被销毁
2.编写在script标签中的变量和函数,作用域为全局,在页面的任意位置都可以访问到
3.在全局作用域中,有全局对象Windows,代表一个浏览器窗口,有浏览器创建,可以直接调用
4.全局作用域中声明的变量和函数会作为windows对象的属性和方法保存
*/

/*函数的作用域
1.调用函数时,函数作用域被创建,函数执行完毕,函数作用域被销毁
2.每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立
3.在函数作用域中可以访问到全局作用域中的变量,在函数歪的变量无法访问到函数作用域中的变量
4.在函数作用域中访问变量、函数时,会先在自身作用域中寻找,若没有,则会到函数的上一级作用域寻找,一直到全局作用域
*/

/* 函数作用域的深层理解
- 当函数执行代码的前期,会创建一个执行期的上下文的内部对象 AO (作用域)
- 这个内部对象是预编译的时候创建出来的,应为当函数被调用时,会先进行预编译
= 在全局代码执行的前期,会创建一个执行期的上下文的对象 GO
*/

/* 函数作用域的预编译
1.创建AO对象 AO{}
2.找形参和变量声明,将变量和形参名当做AO对象的属性名,值为undefined
3.实参形参相统一
4.在函数体里找函数声明,值赋予函数体
*/

/* 全局作用域的预编译
1.创建GO对象
2.找变量声明,将变量名作为GO对象的属性名,值为undefined
3.找函数声明 赋值于函数体
*/

 1 <!--
 2  * @Author: your TM_cc
 3  * @Date: 2021-11-01 15:04:53
 4  * @LastEditTime: 2021-11-01 18:43:26
 5  * @LastEditors: Please set LastEditors
 6  * @Description: In User Settings Edit
 7  * @FilePath: \作用域.html
 8 -->
 9 <!DOCTYPE html>
10 <html lang="en">
11 <head>
12     <meta charset="UTF-8">
13     <meta http-equiv="X-UA-Compatible" content="IE=edge">
14     <meta name="viewport" content="width=device-width, initial-scale=1.0">
15     <title>作用域</title>
16 </head>
17 <body>
18     <script>
19             function fn(a,c){
20             console.log(a) // function a() {}
21             var a = 123
22             console.log(a) // 123
23             console.log(c) // function c() {}
24             function a() {}
25             if (flase){
26                 var d = 456
27             } 
28             console.log(d) // undefined
29             console.log(b) // undefined
30             var b = function () {}  //函数的表达式
31             console.log(b) // function () {}
32             function c() {}
33             console.log(c) // function () {}
34         }
35         fn(1,2)
36         /* 
37             1.创建AO对象
38             AO:{    - 2.找变量声明  值为undefined
39                     - 3.找函数声明并赋值
40                 a:undefined 1 function a() {} 同名覆盖变量申明
41                 c:undefined 2 function c() {} 同名覆盖变量申明
42                 b:undefined
43                 d:undefined
44         } */
45 
46 
47         /* 作用域链
48             - 会被保存到一个隐式的属性中去 [[scope]] 这个属性是用户访问不到的,蛋壳已让js引擎来访问;里面储存的就是作用域链
49             - 函数只有在执行的时候才有AO
50         */
51     </script>    
52 </body>
53 </html>

 

上一篇:基于django的视频点播网站开发-step11-后台用户管理功能


下一篇:call、apply、bind三者的用法和区别