JS作用域的内存模型 | 每个函数都有各自的作用域、作用域链、变量对象、执行环境。
|
1.作用域 | 函数:当前执行的函数能够访问到变量的范围 变量:变量可以活动的范围 |
2.变量对象 | 每个函数都会创建各自的变量对象。 作用域:存储的变量对象的引用; 变量对象:存储函数局部变量。 |
3.作用域链 | 把多个作用域串起来便形成了作用域链; 函数初始化:生成作用域链(不包含自己的作用域); 函数被调用:创建自己的作用域,并加入到作用域链的开头; 作用域链中不仅存储了函数本身的作用域,还存储了该函数能够访问的其他函数的作用域。 |
4.执行环境 | 所有的执行环境会存放在执行环境栈(执行环境栈顶表示当前正在执行的环境)中,只有栈顶的执行环境才有执行权。 每个正在执行的函数都有一个执行环境,记录了函数执行过程中的各项信息。 |
var 全局变量 = "柴毛毛"; function 外层函数(){ var 局部变量1 = "大闲人"; return function(){ var 局部变量2 = "是傻逼"; return 全局变量+局部变量1+局部变量2; }; } var 函数 = 外层函数(); 函数(); |
|
|
|
补充: