热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Javascript内存分配机制

JS内存空间分为栈、堆、池(一般也会归类为栈中)。其中栈存放变量,堆存放复杂对象,池存放常量。▍举个栗子a1、a2、a3都

JS内存空间分为(一般也会归类为栈中)。其中栈存放变量,堆存放复杂对象,池存放常量

 

▍举个栗子

// a1、a2、a3都存放在栈中
var a1 = 0;
var a2 = "This is string.";
var a3 = null;// b1存放在栈中,{m:20}存放在堆中
var b1 = {m: 20
};
// b2存放在栈中,[1,2,3]存放在堆中
var b2 = [1, 2, 3];


▍示例剖析

示例一:

var a = 20;
var b = a;
b = 30;
console.log("a = " + a); // 此时控制台会打印什么呢?

示例二:

var c = {m: 20,n: 30
};
var d = c;
d.m = 15;
console.log("c.m = " + c.m); // 此时控制台会打印什么呢?

结果:

示例一:

a = 20

示例二:

c.m = 15

解析:

 

示例一:a存放在栈中,执行“var b = a;”时,系统会为b分配一个新的栈内存空间,同时将a的值复制给b。此时,a、b是相互独立的,彼此互不影响,所以改变b的值,对a的值是没有影响的。

 

示例二:c存放在栈中,但是{m:20,n:30}存放在堆中,c中存放的是{m:20,n:30}的地址。在执行“var d = c;”时,系统会为d分配一个新的栈内存空间,但是此时系统不会分配新的堆内存用来存放{m:20,n:30},而是将原来的{m:20,n:30}的地址复制给d,所以d和c中存放的是一个相同的地址,也就是说c和d是相互影响的。此时,改变d指向的地址中的值,c所指向的地址的值也会随之改变。


推荐阅读
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • MITM(中间人攻击)原理及防范初探(二)
    上一篇文章MITM(中间人攻击)原理及防范初探(一)给大家介绍了利用ettercap进行arp欺骗及劫持明文口令,后来我发现好友rootoorotor的文章介绍比我写的更透彻,所以基础利用大家可以参看 ... [详细]
author-avatar
G肀丨illian茵茵_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有