说起javascript吧,我只能算是会写一些基础的代码,之前没细致探索过预编译啊、作用域啊。这几天在B站上又细致的看了些这方面内容,特做个笔记,如有错误,欢迎评论指正。
我们都知道,js是解释型语言,它是看一行执行一行,但在执行前会进行预编译。预编译主要进行变量的声明提示和函数的整体提升。本文将主要介绍执行函数这一块,全局也是差不多一样道理。

这是一段代码,里面涉及到控制台输出,小伙伴们可以先判断判断console.log这几处会输出什么。
就函数而言,预编译发生在函数执行的前一刻进行。
首先,在函数执行前一刻创建了AO对象。
然后,我们发现这个函数没有形参,但声明了变量a和变量b,此时的AO对象为:
AO:{
a:undefined,
b:undefined,
}
没有形参和实参这一步,我们来到最后一步,发现有个函数声明即function b(){},到这,AO对象变为:
AO:{
a:undefined,
b:function b(){ ... }
}
预编译到这里就结束了。
开始运行函数,那么第一行输出不言而喻,是undefined。下一行var b这一块就可以忽略,因为已经做过预编译了。
下一行不言而喻,是function b(){}。然后接着,a=20,b=30。那么AO对象里也这样变化:
AO:{
a:20,
b:30
}
最后两个输出就分别是20和30了。
想的对不对呢,打开浏览器看看:
经验证,是这个理。
以上就是对函数这一块预编译的介绍,欢迎大家评论区讨论、指正。


















