JavaScript引擎域编译环节

1.创建执行期上下文<  Active object>

执行到某个函数, JavaScript引擎就会为这个函数分配内存空间<  window也可以叫做global,也是一个函数生成的对象>

下面步骤发生的都是基于这个函数。

2.找形参声明与变量声明,将变量和形参名作为active object的属性名,并将值设置为undefined

需要注意的是变量声明与变量赋值,不要混为一谈。

如果没有声明就给变量赋值,那引擎会自动把它当做window的属性<你会误以为它在此函数作用域,其实是沿着作用域链向上查找输出的>

3.将实参值<若有>和行参统一

这步走完 函数里的形参才会有值,不然就是undefined

4.在函数体里面找函数声明,并把函数体赋值给函数名

 

总结:

在同一作用域内函数和变量的名字如果相同,那么这个名字下面的内存地址一定存的是函数<因为预编译环节,最后开始找函数声明,会将第1步的变量声明内存地址替换掉>

先声明的不一定先编译,具体跟语法有关,要重点区分函数表达式和函数声明。

本站个别资源来源于网络,还请自行再次甄别本资源安全性及合法性! 本站提供的资源(包括但不限于源码,软件,文章)仅供个人为了学习和研究其内含的设计思想和原理,请在查阅后后自觉删除。
2
分享到:

评论2

请先

  1. :redface:
    奥利大哥02-23
没有账号? 忘记密码?