JS预编译过程

首先讲预编译过程

JS代码执行过程三部曲

过程

  1. 语法分析:首先扫描一遍,看有没有低级的语法错误
  2. 预编译
  3. 解释执行:解释一行执行一行

预编译low讲

  1. 函数声明整体提升,变量 的声明提升(这个其实很low,点击low点)

假如没有预编译的话

a();
function a(){console.log("a")
}
先调用再声明,在没有预编译的情况下,不能正常输出,但是有了预编译就可以正常输出,这就是函数整体提升;
定义一个变量  var a = "1233"   这个过程叫做变量的声明 和 赋值 
console.log(a); //undefined
var a = "1233"
变量   声明提升,但是赋值未被提升

low点

函数声明整体提升,变量 的声明提升 上面说的这两个点不能解释下面的代码
  console.log(a);var a = "aaaa";function a(a){var a = 5;}

手动懵逼why???
在这里插入图片描述
真·预编译☞前奏
暗示全局变量 imply global

1.任何变量未经声明就赋值,这个变量就为全局对象(window)所拥有;
----------------------------------------------------------------------------------------------------
2.全局上声明的任何变量,即使声明了也归window 所有;window就是全局的域.
 a = 1;var b = 2;

在这里插入图片描述

 function ddd(){var a = b = 12;//赋值是从右向左,,虽然是在函数局部作用域内,12先赋值给了b,b并没声明所以b是属于window的,a是局部的,然后b在赋值给 a}ddd()

在这里插入图片描述
真·预编译四部曲
AO 对象中四步

预 编 译 发 生 在 函 数 执 行 的 前 一 刻
function fn(a){console.log(a);var a = 123;console.log(a);function a(){}console.log(a);var b = function () {};console.log(b);}
fn(1)
1. 创建AO对象,Activation Object (执行期上下文)
AO{ }
  1. 找形参和变量的声明,将变量的和形参名作为AO属性名,值为undefined
AO{a:undefined,b:undefined,	}
  1. 将实参和形参统一
AO{a:1,b:undefined,	}
  1. 在函数体里面,找 函数声明,值赋予 函 数 体;
AO{a:function a(){}//  把形参覆盖了  注意:**function a(){} 是函数声明 只有它能提升; var b = function(){}这种是表达式**b:undefined,	}

到此AO 对象创建完了
然后马上执行函数了 电脑从 AO 对象里面 拿东西

所以第一次打印的是function a(){},

a 被赋值123,第二次打印的是123,

然后因为function a(){}已经被提升上去,所以不用看,第三次打印也是123,

第四次打印的function ({被提升,所以最后一次打印是function(){}}
输出
在这里插入图片描述

    // }
function test(a,b){console.log(a);	 //function a(){};console.log(b);	//undefinedvar b = 234;console.log(b)	//234a = 123;console.log(a);	//123function a(){};var a ;b = 234;var b = function(){};console.log(a);	//123console.log(b);	//function(){};
}
test(1)
		1.  AO:{//过程}2.  AO:{a:undefined;b:undefined;}3.  AO:{a:1;b:undefined;}4.  AO:{a:function a(){};b:undefined;}
所以第一次输出的a是 function a(){};b 是undefined
b=234AO:{a:function a(){};b:234;}下个b输出就是234a = 123AO:{a:123;b:234;}下个a输出就是123

===中间的声明对AO对象不产生影响所以输出不变

 var b = function(){};AO:{a:123;b:function(){};}

在这里插入图片描述
GO 对象 global object 全局的执行上下文 === window
其实差不多

console.log(a) // 输出的 function a(){}var a = 123;
function a(){
}
console.log(a) //123
1.GO{}
2.GO{a:undefined}
3.GO{a:function a(){}}
4.GO{a:123}

GO AO 一起的

console.log(test); //  这个 输出的是 function test(){},完了之后,就该调用函数了
function test(test){console.log(test); // function test(){} 这个是自己的testvar test = 123;console.log(test); //123function test(){}
} 
test(1);
var test = 123;

理解了预编译就很简单
在这里插入图片描述

【注】局部输出或者使用一个变量,或者方法,假如说内外部都有,优先使用内部的(局部的),局部没有才去全局找
这一点来个超级无敌简单的例子:
var global = 100;
function fn(){console.log(global) // 100;
}
fn()
很简单输出的  100过程  先来个全局 GO 对象 从上到下
GO{global:100,fn:function(){...},
}然后执行 fn 来个局部的  AOAO{//  什么都没有,么有变量和形参声明,只能去全局GO里面找global 就输出; 100}
global = 100;function fn(){console.log(global); //undefinedglobal = 200;console.log(global); //200var global = 300;console.log(global) //300}fn()var global;

在这里插入图片描述

function test(){console.log(b); //undefinedif(a){ //a == undefined ==>falsevar b = 100; //跳过赋值}console.log(b)undefinedc  = 234;console.log(c) //234
}
var a ;
test();
a = 10;
console.log(c)
// GO{
//  a:undefined;
// test:function(){...}
// }// AO{
//  b:undefined,  预编译,可以跳过循环,循环语句里的变量声明已经写入了内存,所以输出是undefined
//  变量c在函数内部没有声明,就被全局接受,【参考以上知识点】
//}

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

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

相关文章

记腾讯互娱网站布局(3)

3.图文回顾 先看看整个网站的全貌 这里’display:table;width:100%;table-layout:fixed’是约定俗成的写法,用来保证固定的表单布局,同时让连续的英文单词不会超出 内部采用’display:table-cell’属性将内容当做表格的td标签一样显示,设置v…

Taro+react开发(51) 数组对象和数组得处理

for (var key of value) {arrcode.push(selectorIndustry.find(obj > obj.value key));}

大小不固定的图片和多行文字的垂直水平居中

1. 单行文字 可能很多人都知道如何让单行文字垂直居中显示,就是使用line-height,将line-height值与外部标签盒子的高度值设置成一致就可以了 2. 多行文字 说白了就是把文字当图片处理。用一个span标签将所有的文字封装起来,设置文字与图片相…

移动端中使用调试控制台

一、一般移动端&#xff1a;在html head中引入移动端调试控制台代码并初始化&#xff1a; <head><meta charset"UTF-8">....<!-- 移动端调试控制台 --><script src"https://cdn.bootcss.com/eruda/1.4.3/eruda.min.js"></scri…

GPT每预测一个token就要调用一次模型

问题&#xff1a;下图调用了多少次模型&#xff1f; 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次&#xff0c;如图所示&#xff1a; 我理解为分类模型 预测下一个token可以理解为分类模型&#xff0c;类别是vocab的所有token&#xff0c;每一次调用都…

display:table-cell的集中应用

1. display:table-cell属性指让标签元素以表格单元格的形式呈现&#xff0c;类似于td标签。我们都知道&#xff0c;单元格有一些比较特别的属性&#xff0c;例如元素的垂直居中对齐&#xff0c;关联伸缩等&#xff0c;所以display:table-cell还是有不少潜在的使用价值的 与其他…

基于display:table的CSS布局

CSS表格能够解决所有那些我们在使用绝对定位和浮动定位进行多列布局时所遇到的问题。例如&#xff0c;“display:table;”的CSS声明能够让一个HTML元素和它的子节点像table元素一样。使用基于表格的CSS布局&#xff0c;使我们能够轻松定义一个单元格的边界、背景等样式&#xf…

ASP.NET MVC Training Kit发布了

Scott Guthrie昨天宣布了ASP.NET MVC 按照Ms-PL协议开源发布&#xff0c;具体内容参见ASP.NET MVC 1.0 has been released&#xff0c;也可以参看Scott Hanselman的新闻稿Microsoft ASP.NET MVC 1.0 is now Open Source MS-PL。 微软同时也推出了一套ASP.NET MVC frameworke培训…

JS实现滚动监听以及滑动到顶部

效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><!-- <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> --><meta name"viewport" …

display:table-cell自适应布局下连续单词字符换行

1. display:table-cell自适应布局 典型的双栏布局类名使用如下&#xff1a; 这种方式实现的自适应布局&#xff0c;元素宽度无需定值&#xff0c;且margin(浮动部分)与padding自由设置&#xff0c;支持百分比宽度&#xff08;table-cell内&#xff09;&#xff0c;且可以无限制…

javascript学习系列(21):数组中的reduceRight法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说…

向高手学习--第3列数据是第2列从头到当前行的值之和

From: http://topic.csdn.net/u/20111203/13/1fb6742b-205f-4bc0-bdeb-ba26a7e174aa.html?14713 问题描述&#xff1a; 我现在有一个表&#xff0c;名字为 table1, 表里有两列&#xff0c;一列是序号ID&#xff0c;一列是数量 NUM1&#xff0c;比如ID1 NUM11 202 303 504 10…

JS滚动条位置,顶部,底部,触发事件

效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-UA-Compatible" c…

ArcGIS 10.0安装之 ArcSDE的安装

第三部分 SDE的安装、部署 1、 安装SDE程序&#xff0c;并进行注册 &#xff08;1&#xff09;选择注册机&#xff0c;点击server标签&#xff0c;在Feature下拉列表框选择arcsdeserver&#xff0c;Version下拉列表框选择100&#xff0c;点击ALL按钮&#xff0c;生成license文件…

自适应表格连续字符换行及单行溢出点点点显示

我们应该都知道使用 让连续的英文数字字符换行显示 让单行文字超出的时候使用点点点表示 但是&#xff0c;如果是自适应的表格中&#xff0c;我们要实现上面两个效果&#xff0c;可能就会遇到挫折&#xff0c;你会发现屡试不爽的方法现在完全被无视了&#xff01; 例如&#…

javascript学习系列(23):数组中的解构方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说解…

IMG图片和文字同一行显示,图片和文字居中显示

问题其实很好解决&#xff0c;只要设定img标签的vertical-align CSS属性就好了&#xff0c;代码如下&#xff1a;

CSS 相对|绝对(relative/absolute)定位系列(一)

1. 绝对定位和浮动元素是近亲&#xff1a;都具备包裹性和破坏性 包裹性&#xff1a;包裹性换种说法就是让元素inline-block化&#xff0c;例如一个div标签默认宽度是100%显示的&#xff0c;但是一旦被absolute属性缠上&#xff0c;则100%默认宽度就会变成自适应内部元素的宽度…

SharePoint 2013 List 备份使用

在测试环境新建List后经过不懈的调整&#xff0c;验证终于做出一个像模像样的表单。 这时候问题来。。。 要怎么迁移到生产环境或者正式环境呢&#xff1f; 在网上找了一些资料&#xff0c;不过都是10的。。 其实想想13跟10区别不大&#xff0c;于是顺利找到了解决方案 备份Lis…

javascript学习系列(24):数组中的substring方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说s…