PHP菜鸟学习历程-3

JS-作用域链及作用

【作用域链】

1 什么事作用域链

一个变量,在当前环境可以使用,当前环境的内部环境也可以使用,内部的深层环境...也可以使用,变量在不同环境都可以使用的现象想成了一个链条,称为“作用域链”

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4       <meta charset="UTF-8">
 5       <title>02-作用域链定义</title>
 6       <script type="text/javascript">
 7       //当前是wondow环境
 8         var name = "tom";
 9         var age = 23;
10         //在js里边,函数就对象,允许有嵌套关系
11         function f1(){
12             //内部环境
13             console.log(name);
14             console.log(age);
15             function f2(){
16                   //内部“深层环境”
17                   console.log(name);
18                   console.log(age);
19                   function f3(){
20                         //内部“深层环境”
21                         console.log(name+"--"+age);
22                   }
23                   f3();
24             }
25             f2();
26         }
27         f1();
28       </script>
29 </head>
30 <body>
31
32 </body>
33 </html>

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4       <meta charset="UTF-8">
 5       <title>03-作用域链定义</title>
 6       <script type="text/javascript">
 7       //变量在当前环境、内部、深层环境都会起作用
 8         var name = "tom";
 9
10         function f1(){
11             var addr = "北京";
12             console.log("f1:"+name+"--"+addr);
13             function f2(){
14                   //变量在当前环境和内部、深层环境都会起作用
15                   var height = "170";
16                   console.log("f2:"+name+"--"+height+"--"+addr);
17                   function f3(){
18                         console.log("f3"+name+"--"+addr+"--"+height);
19                   }
20                   f3();
21             }
22             f2();
23         }
24         f1();
25       </script>
26 </head>
27 <body>
28
29 </body>
30 </html>

2 作用域链的作用

① 变量的作用域链是的变量的作用域会在当前、内部、深层环境起作用,而不会跑到外部环境。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4       <meta charset="UTF-8">
 5       <title>04-作用域链定义</title>
 6       <script type="text/javascript">
 7       //变量在当前环境、内部、深层环境都会起作用
 8       //    不会在外部环境起作用
 9         var name = "tom";
10
11         function f1(){
12             var addr = "北京";
13             console.log("f1:"+name+"--"+addr);
14         }
15         f1();
16         console.log(addr);//undefined
17       </script>
18 </head>
19 <body>
20
21 </body>
22 </html>

04-作用域链定义

② 作用域链使得变量的访问按照顺序访问

变量必须“先声明、后使用”

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>05-作用域链定义</title>
 6
 7     <script type="text/javascript">
 8           //变量在当前、内部、深层环境都会起作用
 9             //变量必须“先声明、后使用”
10             var name="tom";
11             function f1(){
12                   f2();           //使用  //undefined
13                   var addr="北京";//声明
14                   //f2函数的“声明”位置与“调用”没有先后顺序关系
15                   //函数有预加载步骤,代码会被第一个放到内存
16                   function f2(){
17                         console.log("f2:"+name+"--"+addr);
18                   }
19             }
20             f1();
21     </script>
22 </head>
23 <body>
24
25 </body>
26 </html>

05-作用域链定义

③ 变量的作用域是变量声明是就决定的,而不是运行时

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>06-作用域链定义</title>
 6     <script type="text/javascript">
 7       //变量在当前、内部、深层环境都会起作用
 8       //变量的作用域是变量声明时候就决定的,而不是运行时
 9       var age=23;
10       function f1(){
11           console.log("f1:"+age);
12       }
13
14       function f2(){
15           var age=29;
16           f1();
17       }
18       f2(); //f1:23(√)   f1:29(×)
19     </script>
20 </head>
21 <body>
22
23 </body>
24 </html>

06-作用域链定义

3 AO-ActiveObject活动对象

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>07-作用域链定义</title>
 6     <script type="text/javascript">
 7       //变量在当前、内部、深层环境都会起作用
 8
 9       var name="cat";
10       function f1(){
11           var age=5;
12           function f2(){
13               var color="yellow";
14                   console.log(name+age+color);  //ok
15               function f3(){
16                   console.log("f3:"+name+"--"+age+"--"+color);
17               }
18               f3();
19           }
20           f2();
21       }
22       f1();
23     </script>
24 </head>
25 <body>
26
27 </body>
28 </html>

07-作用域链定义

时间: 2024-10-12 14:34:38

PHP菜鸟学习历程-3的相关文章

PHP菜鸟学习历程-8

2 构造函数和普通函数的区别 两者本身没有实质区别,具体看使用 new  函数();   -------->构造函数 函数();        ---------> 普通函数 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>26-构造函数和普通函数</title> 6 &l

PHP菜鸟学习历程-7

[面向(基于)对象] 1 创建对象 在php里边,需要先找到一个类别,在通过类创建具体对象 在javascript里边,可以直接创建具体对象,后期可以再给对象丰富许多属性或方法. 1. 字面量方式创建对象 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>21-创建对象</title>

PHP菜鸟学习历程-4

4 执行环境可以访问什么变量 具体可以访问变量类型:局部变量.参数.函数.外部环境变量 优先级:局部变量 > 函数 > 参数 > 外部环境变量 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>08-执行环境可以访问的变量信息</title> 6 7 <scrip

PHP菜鸟学习历程-6

[闭包案例] 1 闭包创建数组 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>17-闭包-数组</title> 6 <script type="text/javascript"> 7 var num=new Array(); 8 9 for(var i

PHP菜鸟学习历程-11

[继承] 在php,一个类去继承另一个类,本类实例化出来的对象,既可以调用本身类的成员,也可以调用父类的成员. 在javascript继承主要通过原型实现,构造函数继承一个对象,构造函数的实例会拥有被继承对象的相关成员. 原型继承prototype 具体实现: 1单成员继承 “构造函数”通过原型的方式继承单一的成员. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q

PHP菜鸟学习历程-1 JS高级-34-昨天内容回顾

JS高级-34-昨天内容回顾     时间:2015-5-11 1.DOM获取元素节点 document.getElenmentById(id 属性值)                                   具体元素节点对象 document.getElenmentsByTagName(tag 标签名称 div ul li)        数组列表 document.getElenmentsByName(Name 属性值)                       数组列表 2.

PHP菜鸟学习历程-2

1.dom操作,利用dom创建无序列表.并追加到body里边,里面要求至少有四个项目. 2.给每个无序列表设置事件(dom2级),鼠标移入.移除,让鼠标当前行高亮显示 node.style.backgroundColor="gray"; node.style.backgroundColor="";

大三仍是Linux系统小白的我给大家讲讲学习历程

我与Linux结缘是在大三的时候.我与Linux熟识是在偶然遇到<Linux就该这么学>的时候.因为我是电子信息工程专业,在高年级时开设了嵌入式课程,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分.所有带有数字接口的设备,如录像机.车子等,都使用嵌入式系统,有些嵌入式系统还包含操作系统.嵌入式操作系统包括μC/OS-II.嵌入式Linux.VxWorks等,但大部分嵌入式操作系统是不开源且不能免费使用,只有Linux是基于GPL协议,所以它成为了嵌入式系统的绝对主流. 我们学校的嵌入

菜鸟学习Cocos2d-x 3.x——内存管理

菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6) 亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以无限大的让你去使用,特别是在移动端,那么点内存,那么多 APP要抢着用,搞不好,你占的内存太多了,系统直接干掉你的APP,所以说了,我们又要老生常谈了——内存管理.总结COM开发的时候,分析过COM的 内存管理模式:总结Lua的时候,也分析了Lua的内存回收机制:前几天,还专门写了C++中的智能指针在内存