JavaScript中预编译怎么进行


今天小编给大家分享一下JavaScript中预编译怎么进行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在代码执行前,编译器会进行如下操作:分词。就是将代码分成原子符号(token)将token解析翻译成AST(语法生成树)。遇到声明语句,将会把声明传到作用域(scope)中创建绑定,分配内存并将变量默认设为undefined或函数体。然后就可以执行代码啦,执行中途每次遇到赋值或者取值,都会从作用域中查找绑定。这样看,是不是有点“预编译”内味了?但是实际上还是称它为预处理更加贴切一点。接下来,让我们来了解一波看起来最像预编译的操作–第三步的干货。我的老师在和我讲相关知识点前和我说过这么一个笑话:面试时我因为这么一个问题挂了问:为什么输出a的值是100?答:因为100赋值给了a。老师说完我头昏脑涨,完全不明白笑点在哪,后来才知道这是在考察“预编译”这方面的知识。总的来说,“预编译”可以分为创建GO对象(global object) 发生在页面加载完成时创建AO对象(activation object) 发生在函数执行前一刻具体步骤如下:全局预编译1. 创建GO对象2. 找变量声明,将变量声明作为GO对象的属性名,并赋值undefined3. 找全局里的函数声明,将函数名作为GO对象的属性名,值赋予函数体局部预编译1. 创建一个AO对象2. 找形参 香港云主机和变量声明,将形参和变量声明作为AO对象的属性名,值为undefined3. 将实参和形参统一4. 在函数体里找函数声明,将函数名作为AO对象的属性名,值赋予函数体所以那个笑话里的面试问题我们应该这么回答:首先,编译器创建一个GO对象找到变量声明 var a和函数声明 function foo(){}将上面两个变量声明作为GO的属性名赋初值GO{a:undefinedfoo:function(){}}然后运行第一行代码 a=100在GO中将100赋值给a再执行第五行代码运行foo函数创建一个AO对象在函数体内找变量声明和形参,(无)再在函数体内找函数声明(无)所以AO{}完成后运行第三行代码,输出a先在AO对象中寻找a的值,发现不存在,向外部作用域扩展,在GO对象中寻找a,发现a的值为100输出100当然,笑话里的题过于简单,但是能让我们清晰的了解到这个“预编译”的进行下面,我们来看一道面试题简化版,练练手:它的逻辑和输出结果是多少呢?通过一步步的分析我们可以知道具体的分析应该是这样的:以上就是“JavaScript中预编译怎么进行”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注开发云行业资讯频道。

相关推荐: php的hKeys怎么用

今天小编给大家分享一下php的hKeys怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文 香港云主机章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。以上就是“php的hKeys怎么用”这篇…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/18 13:24
Next 07/18 13:24

相关推荐