用内存空间图理解javascript变量存储机制,深度理解闭包

32次阅读

共计 638 个字符,预计需要花费 2 分钟才能阅读完成。

对于下面的 script 代码,它们在内存中是怎样分配的呢?

var a = 123; // 赋值运算符,赋的是内存地址
var b = "hello";

function f() {} // 函数 f 就在函数(方法)定义区
f(); // 函数调用时在函数(方法)缓存区占用内存

var f1 = function() {} // 变量名 f1 存在栈内存中,无名函数在函数(方法)定义区

function Person(){} // 函数 Person 存在函数定义区

var p = new Person(); // new 关键字代表后面的内存创建在堆中
var n = null; // 变量里面存的地址是堆中的 null 对象
var u = undefined; // 变量里面没有存地址

typeof xx === "object";// 堆中
typeof xx === "function";// 函数(方法)缓存区
typeof xx === "number";// 池(常量)typeof xx === "string";// 池(常量)typeof xx === "boolean";// 池(常量)typeof xx === "undefined";// 栈中

内存图

下面是对应的内存图:

闭包

闭包:在函数缓存区有永久的生命周期
通过调用一个函数,让它在函数缓存区有永久的生命周期

(function(factory){window.a = factory.apply(this);
})(function(){
    // 闭包空间
    var a,b,c,d;
    var d = {};
    function f(){}
    return {};})
window.a.a;

正文完
 0