Table of Contents
Overview
JS memory life cycle
Allocating memory
Memory reading and writing
Release memory
Stack memory and heap memory
JS data types
Basic data type
Reference data type
Memory storage mechanism
Memory access mechanism
deep-shallow copy
shallow Copy
另外实现深拷贝的方法(更多方式请自行百度)
系列目录
一张纸搞懂JS系列(1)之编译原理,作用域,作用域链,变量提升,暂时性死区" >一张纸搞懂JS系列(1)之编译原理,作用域,作用域链,变量提升,暂时性死区
一张纸搞懂JS系列(2)之JS内存生命周期,栈内存与堆内存,深浅拷贝
一张纸搞懂JS系列(3)之垃圾回收机制,内存泄漏,闭包
Home Web Front-end JS Tutorial Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper

Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper

Sep 29, 2020 pm 04:18 PM

Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper

Write at the front: Under the javascript column, this is a series I am about to start writing, mainly in the era of rampant frameworks, even though I am at work A framework is used, but for interviews and technical advancement, the foundation of basic JS knowledge is the icing on the cake, and it is also a piece of knowledge that must be learned. Although car drivers do not need to know much about cars, they only need to master the common functions of cars. But if you know cars, you can drive better, and by the same token. Of course, an article will not just talk about one knowledge point. Generally, related knowledge points will be connected in series. While recording your own learning, you will share your own learning and encourage each other! If you can, please also please give me a like, your likes will also make me work harder to update!

Overview

  • Eating time: 6-12 minutes
  • Difficulty: Easy, don’t run, watch before leaving

JS memory life cycle

  • Allocating memory

  • Memory reading and writing

  • Release memory

Stack memory and heap memory

JS data types

Before talking about stack memory and heap memory, everyone should We all know that JS is divided into two data types:

  • Basic data type

    String, Number, Boolean, null, undefined, Symbol (fixed size, volume Lightweight, relatively simple)

  • Reference data type

    Object, Array, Function (The size is not necessarily certain, it takes up a large space, and it is relatively complex )

Memory storage mechanism

var a=true;      //布尔型,基本数据类型var b='jack';    //字符型,基本数据类型var c=18;        //数值型,基本数据类型var d={name:'jack'};   //对象,引用数据类型var d=[0,1,2,3,4,5];   //数组,引用数据类型复制代码
Copy after login

It is precisely because of the different data types that their storage methods are also different, just like the poor and the rich in real life People’s residences are completely different (distant). Let’s take a look at a picture first:

Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper

You can see that a , b , c are all basic Data types, d and e are both reference data types. They have essential differences in storage methods. The values ​​of basic data types are stored in stack memory, while The value of the reference data type is stored in the heap memory. The stack memory only stores its reference in the stack memory (that is, its address in the heap memory). Just like its name, the reference data type

Memory access mechanism

The above is about storage. Next, let’s talk about variable access. Basic data types can directly access the value of variables from the stack memory, while reference data types must first access the variables from the stack memory. Find its corresponding reference address in the stack memory, and then take this reference address and search it in the heap memory to get the value of the variable

deep-shallow copy

  • shallow Copy

    I have already told you about the difference in storage between basic data types and reference data types. So, the deep and shallow copy mentioned next, I believe you often encounter it in interview questions, the old way , first look at a piece of code

    var name='jack';var obj={  age:24};var nameCopy=name;var objCopy=obj;
    
    nameCopy='bob';
    objCopy.age=15;console.log(name);    //jackconsole.log(obj.age);     //15复制代码
    Copy after login

    You will find that name is not affected, and our naming is to modify objCopy.age, why is it still affected? obj.age, this is because of the problem of dark and shallow copying. Let’s take a look at the picture below

Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper
# #The reason why this happens is that for basic types and reference types in JS, when we copy the reference type, what is copied is the reference address of the object, so when executing

var objCopy=obj; , the reference address of obj is copied to objCopy, so the two objects actually point to the same object, that is, the change objCopy also changes the value of obj. We call this situation shallow copy. It only copies the reference of the object and does not open a new one. The memory is short-handed and the copy space is too shallow. (Shallow copy will only occur with reference types)

  • Deep copy

    Let’s look at the next piece of code

    var name='jack';var obj={  age:24};var nameCopy=name;var objCopy=JSON.parse(JSON.stringify(obj));
    
    nameCopy='bob';
    objCopy.age=15;console.log(name);    //jackconsole.log(obj.age);     //24复制代码
    Copy after login

    It can be found that after the conversion through

    JSON.parse(JSON.stringify(obj)), the shallow copy no longer exists. This wave is deep copy, deep copy development A new heap memory address is obtained, and the reference of the object points to the newly opened memory address. It is completely independent from the previously copied object. It is self-reliant and copied deeply. Learn the skills and master the skills. a feeling of.

  • 另外实现深拷贝的方法(更多方式请自行百度)

    var objCopy=Object.assign({},obj);   //对象深拷贝的方法 Object.assign
    var arrayCopy=array.concat();       //数组深拷贝的方法  concat()  (数组无嵌套对象或者数组可用)
    var arrayCopy=array.slice();       //数组深拷贝的方法  slice()   (数组无嵌套对象或者数组可用)
    JSON.parse(JSON.stringify(array))     //顺带提下,JSON.parse(JSON.stringify())   数组和对象通用复制代码
    Copy after login

    接着上面的数组容易踩坑的地方 ,来看一个例子

    var array = [{name: 'jack'}, ['old']];var arrCopy = array.concat();
    arrCopy[0].name='new';console.log(array); // [{name: 'new'}, ['old']]console.log(arrCopy); // [{name: 'new'}, ['old']]复制代码
    Copy after login

    可以清楚地看到(数组无嵌套对象或者数组可用的情况下用 concatslice 才有效)

    系列目录

    更多相关免费学习推荐:javascript(视频)

    The above is the detailed content of Understand JS memory life cycle, stack memory and heap memory, deep and shallow copy in JS series (2) on one piece of paper. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

The Evolution of JavaScript: Current Trends and Future Prospects The Evolution of JavaScript: Current Trends and Future Prospects Apr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

The difference in console.log output result: Why are the two calls different? The difference in console.log output result: Why are the two calls different? Apr 04, 2025 pm 05:12 PM

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...

See all articles