JavaScript预编译怎么理解?js运行代码这三步骤要知
Admin 2021-05-10 群英技术资讯 1238 次浏览
对于JavaScript的语法以及实现大家应该都有一定的了解了,但是对于JavaScript的预编译有很多人是不太清楚的,下面就从语法分析,预编译,解释执行这三步骤给大家介绍一下JavaScript的预编译。
js运行代码共分三步
JavaScript代码在运行时,首先会进行语法分析,通篇检查代码是否存在低级错误,然后进行预编译,整理内部的一个逻辑,最后再开始一行一行的执行代码
代码在执行之前,系统会通篇扫描一遍,检查代码有没有低级的语法错误,比如少写个大括号。
预编译发生在函数执行的前一刻。变量未经声明就赋值,此变量为全局对象所有
a = 3
var b = c = 4
一切声明的全局变量,全是window的属性
var a = 1 ===> window.a = 1
用一个例子来说明一下,也可以自己先给出一个答案,再继续往下看
function fn(a) { console.log(a); var a = 123; console.log(a); function a() {} console.log(a); var b = function() {}; console.log(b); function d() {} console.log(d) } fn(1);
第一步,创建AO(Activation Object)对象 {}第二步,找形参和变量声明,将变量和形参名做为AO属性名,值为undefined
{ a: undefined, b: undefined, }
第三步,将实参和形参统一
{ a: 1, b: undefined, }
第四步,找函数声明,值赋予函数体
{ a: function a() {}, b: undefined, d: function d() {} }
所以在函数fn执行的前一刻,a、b、d的值如上所示
所以fn(1)执行的结果为
// ƒ a() {}
// 123
// 123
// ƒ () {}
// ƒ d() {}
在全局作用域里,预编译过程有些许不同
一行一行的执行代码
这里有几个例题,有兴趣的可以看一下
function test(a, b) { console.log(a); console.log(b); var b = 234; console.log(b); a = 123; console.log(a); function a() {} var a; b = 234; var b = function() {}; console.log(a); console.log(b); } test(1);
global = 100; function fn() { console.log(global); global = 200; console.log(global); var global = 300; } fn(); var global;
function test() { console.log(b); if (a) { var b = 100; } c = 234; console.log(c); } var a; test(); a = 10; console.log(c);
多数情况下,我们都是采用下面的这种方式来处理预编译的一个过程
若是遇见复杂的情况就只能采用最原始的方式来解决问题了
关于JavaScript预编译的介绍就到这,希望大家阅读完这篇文章之后都有所收获,想要了解更多JavaScript预编译的内容大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
递归是算法中一个重要的解法,因此,有必要单拎出来讲讲,所以下面这篇文章主要给大家介绍了关于JavaScript递归经典案例题的相关资料,需要的朋友可以参考下
在编程语言理论中,惰性求值(英语:Lazy Evaluation),又译为惰性计算、懒惰求值,也称为传需求调用(call-by-need),是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。它有两个相关而又有区别的含意,可以表示为“延迟求值”和“最小化求值”
这篇文章主要介绍了nuxt.js 多环境变量配置,一般在香米开发中会有三个环境开发环境也叫测试环境(test) 、RC环境也叫预发布环境(rc) 、线上环境(production) 下面来看看文章内容的详细介绍,需要的朋友可以参考一下
这篇文章给大家分享的JS实现动态添加圆圈序号效果。小编觉得挺实用的,而且这种效果的效果也比较美观,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
在项目开发过程中,因为项目的需要由时候必须要设置弹出的视图,而Angular实现的方式有哪几种呢?今天爱站技术频道小编就为大家带来了Angular弹出模态框的两种方式,一起进入下文学习吧!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008