JavaScript之预编译

JavaScript执行步骤

1.检查通篇的语法错误
2.预编译过程
3.解释一行,执行一行

 1   (a)
 2   test()
 3   function test() {
 4     console.log(1) // 1
 5   }
 6 
 7   (b)
 8   console.log(a); // undefined
 9   var a ;
10 
11   函数申明整体提升,变量只有申明提升,赋值不提升
12 
13   (c)
14   console.log(a) // function a(a){}
15   function a(a){}
16   var a = 1
17 
18   (d)
19   var a = 1
20   b = 2
21   console.log(window.b) // a = window.a
22                         // b = window.b

暗示全局变量 imply global variable

 1   (a)
 2   function test(){
 3     var a = b = 1
 4     // 1.先声明 var a
 5     // 2.1赋值给b
 6     // 3.b的值赋值给a
 7   }
 8   console.log(a) // error
 9   console.log(window.a) // undefined
10   console.log(b) // 1
11   console.log(window.b) // 1
12 
13   (b)
14   function test(a) {
15    console.log(a) // function a() {}
16    var a = 1
17    console.log(a) // 1
18    function a() {}
19    console.log(a) // 1
20    var b = function () {}
21    console.log(b) // function(){}
22    function d() {}
23   }
24   test(2)

函数预编译:AO activation object (活跃对象,函数上下文)

 1  function test(a) {
 2    console.log(a) // function a() {}
 3    var a = 1
 4    console.log(a) // 1
 5    function a() {}
 6    console.log(a) // 1
 7    var b = function () {}
 8    console.log(b) // function(){}
 9    function d() {}
10   }
11   test(2)
12     
13  执行过程
14 
15  AO = {
16 
17   }
18 
19   <-预编译过程->
20 
21   第一步:寻找形参和变量申明
22   AO = {
23     a: undefined,
24     b: undefined
25   }
26 
27   第二步:实参赋值给形参
28   AO = {
29     a: undefined -> 2,
30     b: undefined
31   }
32 
33   第三步:寻找函数体的申明,并赋值
34   AO = {
35     a: undefined -> 2 -> function a() {},
36     b: undefined,
37     d: function d() {}
38   }
39 
40   <-代码执行过程->
41  第四步:执行函数体第一句
42  // console.log(a):function a(){}
43 
44  第五步:执行函数体第二局
45  //a = 1
46   AO = {
47     a: undefined -> 2 -> function a() {} -> 1,
48     b: undefined,
49     d: function d() {}
50   }
51 
52   ....

 全局预编译:GO global object 全局上下文


1. 找变量
2. 找函数申明
3. 执行

 1   (a)
 2   var a = 1
 3   function a() {
 4     console.log(2)
 5   }
 6   console.log(a) // 1
 7 
 8   GO = {
 9     a: undefined -> function a(){} -> 1
10   }
11 
12   其实GO就是window,即GO === window
13 
14   (b)
15   console.log(a, b) // function a(){} undefined
16   function a() {}
17   var b = function () {}
18 
19   GO = {
20     b: undefined
21     a: function a(){}
22   }

练习

  1 练习
  2 
  3   (1  4    function test() {
  5       var a = b = 1;
  6       console.log(b); // 1
  7    }
  8    test();
  9    步骤:
 10    <-预编译过程->
 11    1.
 12    GO = {
 13 
 14    }
 15 
 16    2.
 17    GO = {
 18 
 19    }
 20 
 21    AO = {
 22       a: undefined
 23    }
 24    <-执行过程->
 25    3.
 26    GO = {
 27       b: 1
 28    }
 29 
 30    AO = {
 31       a: undefined
 32    }
 33 
 34    4.
 35    GO = {
 36       b: 1
 37    }
 38 
 39    AO = {
 40       a: undefined -> 1
 41    }
 42 
 43    (2)
 44    var b = 3;
 45    console.log(a); // function a(a){...}
 46    function a(a){
 47       console.log(a) // function a(){}
 48       var a = 2;
 49       console.log(a); // 2
 50       function a(){}
 51       var b = 5;
 52       console.log(b) // 5
 53    }
 54    a(1);
 55 
 56    步骤:
 57 
 58    <-编译过程->
 59 
 60    GO = {
 61       b: undefined,
 62       a: function a(){...}
 63    }
 64 
 65    AO = {
 66       a: undefined -> 1 -> function a(){}
 67       b: undefined
 68    }
 69 
 70   <-执行过程->
 71 
 72    GO = {
 73       b: undefined -> 3,
 74       a: function a(){...}
 75    }
 76 
 77    AO = {
 78       a: undefined -> 1 -> function a(){} -> 2
 79       b: undefined -> 5
 80    }
 81 
 82 
 83   (3)
 84   a = 1;
 85   function test(){
 86     console.log(a); // undefined
 87     a = 2;
 88     console.log(a); // 2
 89     var a = 3;
 90     console.log(a) // 3
 91   }
 92   test()
 93 
 94   (4)
 95   function test(){
 96     console.log(b); // undefined
 97     if (a) {
 98       var b = 2;
 99     }
100 
101     c = 3;
102     console.log(c) // 3
103   }
104 
105   var a;
106   test();
107   a = 1;
108   console.log(a); // 1
109 
110   (5)
111   function test(){
112     return a;
113     a = 1;
114     function a(){}
115     var a = 2;
116   }
117   console.log(test()); // function a(){}
118 
119 
120   (6)
121   function test(){
122     a = 1;
123     functin a(){}
124     var a = 2;
125     return a;
126   }
127   console.log(test()); // 2
128 
129   (7)
130   a = 1;
131   function test(e){
132     function e(){}
133     arguments[0] = 2;
134     console.log(e); // 2
135     if(a){
136       var b = 3;
137     }
138     var c;
139     a = 4;
140     var a;
141     console.log(b); // undefined
142     f = 5;
143     console.log(c); // undefined
144     console.log(a); // 4
145   }
146   var a;
147   test(1);

 

转载于:https://www.cnblogs.com/wanghao123/p/10451612.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使Netty 4中的HTTP内容压缩工作

Netty确实是一个很棒的框架&#xff0c;提供了构建高性能HTTP服务器所需的所有功能。 令人高兴的是&#xff0c;几乎所有东西都是开箱即用的&#xff0c;只是必须以正确的方式组合在一起。 内容压缩 &#xff08;gzip或deflate&#xff09;也不例外。 但是&#xff0c;在压缩静…

sap生产工单报工_【案例】MES系统助力亨通电缆车间生产效率提升25%

一、企业简介江苏亨通电力电缆有限公司是亨通集团旗下的一家重点高新技术企业&#xff0c;于2003年在上交所成功上市&#xff0c;属于上市公司的电力传输板块。公司目前已拥有超高压电力电缆、超高压海缆、中低压电力电缆、电气装备用电缆、特高压导线、电力光缆以及铜铝加工等…

mysql 二叉树表设计_mysql---B+tree索引的设计原理

1.什么是数据库的索引每种查找算法都只能应用于特定的数据结构之上&#xff0c;例如二分查找要求被检索数据有序&#xff0c;而二叉树查找只能应用于二叉查找树上&#xff0c;但是数据本身的组织结构不可能完全满足各种数据结构(例如&#xff0c;理论上不可能同时将两列都按顺序…

JS_单个或多个文件上传_不支持单独修改

A-From表单直接填写提交地址&#xff0c;不过干预&#xff1a; 1. 单文件上传 最简单的文件上传&#xff0c;是单文件上传&#xff0c;form标签中加入enctype"multipart/form-data"&#xff0c;form表单中有一个input[type"file"]项 <form name"…

一些算法学习的推荐博文阅读(数论居多,图论没有)

上面是自己的学习笔记&#xff0c;下面是推荐博文阅读 关于每个知识点的阅读顺序若不加序号一般是并列的&#xff0c;有序号的话一般是推荐看&#xff08;当然一知半解的话可以从头看起也可以从中间开始&#xff09; 另外&#xff0c;有的链接放在推荐的下面了 另另外&#xff…

scipy是python下的什么_SciPy是什么

SciPy是一个开源的Python算法库和数学工具包。 SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。SciPy 是一个开源的 Python 算法库和数学工具包。 SciPy 包含的模块有最优化、线…

解码Java.Lang.OutOfMemoryError:PermGen空间

Java开发人员最不了解的领域之一是垃圾收集。 Java开发人员认为JVM负责垃圾收集&#xff0c;因此他们不必担心内存分配&#xff0c;释放等问题。但是&#xff0c;随着应用程序变得越来越复杂&#xff0c;垃圾收集也会变得越来越复杂&#xff0c;一旦性能变得复杂&#xff0c;性…

Python_报错:IndexError: list assignment index out of range

今天发现一个报错&#xff0c;卡了好几个点&#xff0c;后来发现原因后&#xff0c;脸上三条黑线&#xff0c;尴尬啊&#xff01;&#xff01;&#xff01; 报错&#xff1a;IndexError: list assignment index out of range 原因&#xff1a;split()写法转成列表就会认作一个整…

mysql跨服务器查询插入_Oracle跨服务器查询插入数据

想实现insert into 当前库表 select 远程库中的表数据这种方式的数据同步&#xff0c;于是配置了一下oracle服务&#xff0c;远程和本地服务都是oracle 一、在当前库中插入数据 1 2 create public database link remotedb connect to username identified by password using db…

angular-JS模仿Form表单提交

直接上示例代码&#xff0c;有不懂的欢迎留言&#xff1a; $http({url: "http://localhost:10086/yuanxin/Conference/ImportExcelDataForBusRoute",method: Post,headers: {Content-Type: multipart/form-data },data: { BusRoute: file, ConferenceID: "1&…

想要更快地使用AtomicLong? 等待它。

我经常听到Java原子类型&#xff08;java.util.concurrent.atomic&#xff09;超级快&#xff0c;可以很好地与高度并发的代码一起使用。 在大多数情况下&#xff0c;原子以健壮和高效的方式发挥作用。 但是&#xff0c;在某些情况下&#xff0c;原子类型上非托管争用的隐藏成本…

994. 腐烂的橘子

994. 腐烂的橘子 在给定的网格中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。每分钟&#xff0c;任何与腐烂的橘子&#xff08;在 4 个正方向上&#xff09;相邻的新鲜橘子都会腐…

python爬虫简历范文_爬虫数据解析,简历模板下载!想收我Q,不存在的!

目标网址代码基础代码&#xff1a;第一页模板下载import requestsfrom lxml import etreeif __name__ __main__:headers {User-Agent: Mozilla / 5.0(Windows NT 6.1; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 86.0.4240.198 Safari / 537.36}# 免费下…

java获取页面标签_java获取网页源代码后,提取标签内容……

java获取网页源代码后&#xff0c;提取标签内容……关注:245 答案:2 mip版解决时间 2021-02-01 09:11提问者咏b琂败2021-01-31 13:49import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.ne…

C#数字,日期格式化:String.Format

C#:String.Format数字格式化输出 int a 12345678; //格式为sring输出// Label1.Text string.Format("asdfadsf{0}adsfasdf",a);// Label2.Text "asdfadsf"a.ToString()"adsfasdf";// Label1.Text string.Format("asdfadsf{0:C}adsfasdf…

jquery中点击切换的实现

项目中经常会遇到一种情况&#xff0c;就是点击切换&#xff0c;比如点击按钮&#xff0c;div样式为1&#xff0c;再点击一下按钮&#xff0c;div样式为2&#xff0c;再点击一下按钮&#xff0c;div样式为1。需要自定义jQuery方法toggle。 // toggle方法$.fn.toggle function(…

Spring Data MongoDB级联保存在DBRef对象上

默认情况下&#xff0c; Spring Data MongoDB不支持对带有DBRef注释的引用对象的级联操作&#xff0c;如引用所述 &#xff1a; 映射框架不处理级联保存 。 如果更改了Person对象引用的Account对象&#xff0c;则必须单独 保存 Account对象。 在Person对象上调用save 不会自动…

BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离

传送门——BZOJCH 传送门——Vjudge 设\(f_i\)表示\(i\)到\(1\)号点的最短距离&#xff0c;\(g_i\)表示\(i\)到\(2\)号点的最短距离&#xff0c;\(s_i\)表示\(n1\)号点到\(i\)号点的最短距离&#xff0c;\(As_1,Bs_2\) 根据最短路三角形不等式&#xff0c;\(|f_i - A| \leq s_i…

scrapy安装_爬虫框架Scrapy简介与安装

Scrapy 框架Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架&#xff0c;用途非常广泛。框架的力量&#xff0c;用户只需要定制开发几个模块就可以轻松的实现一个爬虫&#xff0c;用来抓取网页内容以及各种图片&#xff0c;非常之方便。Scrapy 使…

前端面试题(附上自己的回答)

一些开放性题目 1.自我介绍&#xff1a;除了基本个人信息以外&#xff0c;面试官更想听的是你与众不同的地方和你的优势。 2.项目介绍&#xff1f; 3.如何看待前端开发&#xff1f; 4.平时是如何学习前端开发的&#xff1f; 5.未来三到五年的规划是怎样的&#xff1f; position…