美文网首页
JS 堆栈内存

JS 堆栈内存

作者: destiny0904 | 来源:发表于2018-08-23 10:56 被阅读0次

堆栈内存的作用

JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行

栈内存:

  • 提供一个供 JS 代码自上而下执行的环境(作用域,代码都是在栈内存中执行的)
  • 由于基本类型比较简单,它们都是直接在栈内存中开辟一个位置,直接把值存储进去的

堆内存:引用值对应的空间
存储引用类型的(对象:键值对,函数:代码字符串)

堆内存的释放

让所有引用堆内存空间地址的变量赋值为 null 即可,当堆内存没有被任何的变量或者其他东西引用时,就会在浏览器执行垃圾回收的时候,被销毁掉。

堆内存释放后,里面存储的值也就会被释放掉。

栈内存的释放

全局作用域会在页面关闭或者刷新的时候释放。(栈内存释放后,存储在栈内存中的值也都会销毁。

私有作用域:一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉,但是也有特殊的情况。

函数执行完成,当前形成的栈内存中,某些内容被栈内存意外的变量一直占用,此时栈内存不能释放,栈内存中存储的基本值也不会被释放,一直保存下来。最典型的就是闭包。

var i = 1;
function fn(i) {
  return function(n) {
    console.log(n + (++i));
  }
}
var f = fn(2); //=> i = 2
f(3); //=>7, i = 2 n =3,执行 n + (++i) => 3 + 3 = 6
fn(5)(6); //=>12, i = 5 n = 6,执行 n + (++i) => 6 + 6 = 12
fn(7)(8); //=>16, i = 7 n = 8,执行 n + (++i) => 8 + 8 = 16
f(4); //=>8, i = 3 n = 4,执行 n + (++i) => 4 + 4 = 8

相关文章

  • JS 堆栈内存

    堆栈内存的作用 JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行 栈内存: 提供一个供 J...

  • 前端线路图

    1 堆栈内存以及闭包作用域 1 js中的基本数据类型以及其区别 (8种) 2 js堆栈内存的运行机制 3 变量提升...

  • js知识版图-数据类型

    一、js中内存分为栈内存、堆内存此处引申知识点:js中堆栈内存及函数处理机制 栈内存 从数据类型角度思考 栈内存 ...

  • Js/1 堆栈内存/变量提升和闭包

    1# Js数据类型渲染机制和堆栈内存 Js 文件的放置位置 head 头部 body 底部(推荐) Js 的 ...

  • javaScript引擎,运行时和调用堆栈的概述

    下图是关于js引擎的简化图 主要包含两个组件:*内存堆 -内存分配发生的地方*调用堆栈 - 代码执行时的堆栈 对j...

  • 2.JS-堆栈内存

    栈内存(stack)存放常量 基本类型值, 如a=12 这个12就放在栈中 堆内存(heap)只有一个作用,专门用...

  • js中堆栈、作用域(链)、this、闭包及垃圾回收

    一、堆栈 1、内存构成、作用域(链)与this JS的内存空间分为栈(stack)、堆(heap)、池(一般也会归...

  • 浅聊js运行机制

    // 浅聊js的运行机制(堆栈内存和不同的数据类型的操作方式) var a = 12; var b = a; b ...

  • 堆栈内存和js代码执行

    1.堆栈内存是什么? 1)内存大概分4块, 栈内存存放基本变量和对象的引用, 堆内存存放对象,栈内存中的引用指向堆...

  • 堆栈内存

    JS中的内存:堆内存和栈内存 堆内存是用来存储引用数据类型值的(例如:创建函数和创建对象,就像开辟一个堆内存,把代...

网友评论

      本文标题:JS 堆栈内存

      本文链接:https://www.haomeiwen.com/subject/ffepiftx.html