对于下面的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;