


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]; //数组,引用数据类型复制代码
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:

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复制代码
You will find that
name
is not affected, and our naming is to modifyobjCopy.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

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 copyLet’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复制代码
It can be found that after the conversion throughJSON.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()) 数组和对象通用复制代码
接着上面的数组容易踩坑的地方 ,来看一个例子
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']]复制代码
可以清楚地看到(数组无嵌套对象或者数组可用的情况下用
concat
和slice
才有效)
系列目录
一张纸搞懂JS系列(1)之编译原理,作用域,作用域链,变量提升,暂时性死区
一张纸搞懂JS系列(2)之JS内存生命周期,栈内存与堆内存,深浅拷贝
一张纸搞懂JS系列(3)之垃圾回收机制,内存泄漏,闭包
更多相关免费学习推荐: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!

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

The main difference between Python and JavaScript is the type system and application scenarios. 1. Python uses dynamic types, suitable for scientific computing and data analysis. 2. JavaScript adopts weak types and is widely used in front-end and full-stack development. The two have their own advantages in asynchronous programming and performance optimization, and should be decided according to project requirements when choosing.

Whether to choose Python or JavaScript depends on the project type: 1) Choose Python for data science and automation tasks; 2) Choose JavaScript for front-end and full-stack development. Python is favored for its powerful library in data processing and automation, while JavaScript is indispensable for its advantages in web interaction and full-stack development.

Python and JavaScript each have their own advantages, and the choice depends on project needs and personal preferences. 1. Python is easy to learn, with concise syntax, suitable for data science and back-end development, but has a slow execution speed. 2. JavaScript is everywhere in front-end development and has strong asynchronous programming capabilities. Node.js makes it suitable for full-stack development, but the syntax may be complex and error-prone.

JavaScriptisnotbuiltonCorC ;it'saninterpretedlanguagethatrunsonenginesoftenwritteninC .1)JavaScriptwasdesignedasalightweight,interpretedlanguageforwebbrowsers.2)EnginesevolvedfromsimpleinterpreterstoJITcompilers,typicallyinC ,improvingperformance.

JavaScript can be used for front-end and back-end development. The front-end enhances the user experience through DOM operations, and the back-end handles server tasks through Node.js. 1. Front-end example: Change the content of the web page text. 2. Backend example: Create a Node.js server.

Choosing Python or JavaScript should be based on career development, learning curve and ecosystem: 1) Career development: Python is suitable for data science and back-end development, while JavaScript is suitable for front-end and full-stack development. 2) Learning curve: Python syntax is concise and suitable for beginners; JavaScript syntax is flexible. 3) Ecosystem: Python has rich scientific computing libraries, and JavaScript has a powerful front-end framework.

The power of the JavaScript framework lies in simplifying development, improving user experience and application performance. When choosing a framework, consider: 1. Project size and complexity, 2. Team experience, 3. Ecosystem and community support.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver CS6
Visual web development tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Notepad++7.3.1
Easy-to-use and free code editor
