资讯专栏INFORMATION COLUMN

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

The question / 1154人阅读

摘要:对于下面的代码,它们在内存中是怎样分配的呢赋值运算符,赋的是内存地址函数就在函数方法定义区函数调用时在函数方法缓存区占用内存变量名存在栈内存中,无名函数在函数方法定义区函数存在函数定义区关键字代表后面的内存创建在堆中变量里面存的地址是堆中的

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103760.html

相关文章

  • 理解闭包

    摘要:我的理解就是还处于被引用状态。内存机制的内存空间分为栈堆其中栈存放变量,堆存放复杂对象。对堆内数据进行复制修改时理解闭包有了前面的铺垫,我们再来看看闭包是怎么回事。这种反常的现象我们就叫它,中文名闭包。这就是闭包形成的原因了。 知识小储备 ECMAScript 的数据有两种类型:基本类型值和引用类型值,基本类型指的是简单的数据段,引用类型指的是可能由多个值构成的对象。Undefined...

    fox_soyoung 评论0 收藏0
  • 前端基础进阶(一):内存空间详细

    摘要:一栈数据结构与不同,中并没有严格意义上区分栈内存与堆内存。引用数据类型的值是保存在堆内存中的对象。不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。为了更好的搞懂变量对象与堆内存,我们可以结合以下例子与图解进行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...

    _Suqin 评论0 收藏0
  • 前端基础进阶(四):详细解作域链与闭包

    摘要:之前一篇文章我们详细说明了变量对象,而这里,我们将详细说明作用域链。而的作用域链,则同时包含了这三个变量对象,所以的执行上下文可如下表示。下图展示了闭包的作用域链。其中为当前的函数调用栈,为当前正在被执行的函数的作用域链,为当前的局部变量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初学JavaScrip...

    aikin 评论0 收藏0
  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。 开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研...

    罗志环 评论0 收藏0
  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研发体系...

    isaced 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<