JavaScript预编译怎么理解?js运行代码这三步骤要知
Admin 2021-05-10 群英技术资讯 1444 次浏览
对于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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是隐藏域的作用和获取隐藏域中的值的方法,文中的获取隐藏域中的值的示例是使用jQuery实现的,下文有详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
Promise是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理且更强大,这篇文章主要给大家介绍了关于如何一步步实现一个简易promise的相关资料,需要的朋友可以参考下
这篇文章给大家分享的是用JS实现简单的省市联动效果的内容,小编觉得挺实用的,因此分享给大家做个参考,接下来一起跟随小编看看吧。
这篇文章主要介绍了CocosCreator制作射击游戏,各个方面都讲的比较详细,希望同学们自己动手试一下
这篇文章主要为大家详细介绍了javascript实现随机抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008