Heap vs Stack
Heap vs Stack in JavaScript Memory
JavaScript-ի շարժիչը (օր.՝ V8) հիշողությունը բաժանում է երկու հիմնական հատվածի՝
Երբ փոփոխական ես հայտարարում՝ հիշողության տարբեր հատվածներ են օգտագործվում՝ կախված տվյալների տիպից։
// Stack - primitive types
let age = 30;
let isOnline = true;
// Heap - reference types
let user = {
name: "Ani",
age: 25
};
Երբ primitive փոփոխական փոխանցում ես ֆունկցիային՝ դա փոխանցվում է ըստ արժեքի (by value), իսկ օբյեկտը՝ ըստ հղման (by reference)։
function updateAge(a) {
a = 40;
}
let myAge = 30;
updateAge(myAge);
console.log(myAge); // 30 - primitive => value copy
function updateUser(obj) {
obj.age = 40;
}
let person = { age: 30 };
updateUser(person);
console.log(person.age); // 40 - reference => direct modify
Heap vs Stack-ը հասկանալու առավելությունները.
Քանի որ JavaScript-ն ավտոմատ է կառավարում հիշողությունը, մենք չենք գրում free()
կամ delete
, ինչպես C-ում, սակայն մենք կարող ենք նպաստել արդյունավետությանը՝
const
այնտեղ, որտեղ փոփոխություն պետք չէ
// WeakMap – թույլ հղում, GC կարող է ազատել օբյեկտը
let cache = new WeakMap();
function process(user) {
if (!cache.has(user)) {
cache.set(user, computeHeavy(user));
}
return cache.get(user);
}
Ինչու՞ օգտագործել WeakMap/WeakSet-ը: