JS 기본 픽업 - 스 택 메모리 와 메모리

4777 단어 전단자바 script
기본 데이터 형식 과 참조 데이터 형식
JS 의 기본 데이터 형식 (number, string, null, undefined, boolean) 과 인용 형식 (Object) 의 차 이 를 정확하게 파악 하려 면 스 택 메모리 와 메모리 의 차 이 를 어느 정도 이해 해 야 합 니 다.스 택 메모리: 값 에 따라 저장 하고 공간 크기 가 확정 되 며 시스템 이 자동 으로 방출 되 며 직접 접근 할 수 있 고 액세스 가 빠 릅 니 다.메모리 쌓 기: 크기 가 일정 하지 않 고 자동 으로 방출 되 지 않 으 며 액세스 가 느 립 니 다.
기본 데이터 형식의 값 은 스 택 메모리 에 저장 되 고 데이터 형식 을 참조 하 는 값 은 메모리 에 저 장 됩 니 다.
기본 데이터 형식 과 스 택 메모리 (Stack)
값 에 따라 보관 하 다
스 택 메모리 가 값 에 따라 저장 되 기 때문에 할당 작업 은 모두 새로운 메모리 공간 을 열 것 입 니 다. 예 를 들 어
var a = 3;
//   
var b = a;

여기 있 는 b 와 a 는 값 을 부여 한 후에 서로 영향 을 주지 않 습 니 다. 메모리 에 있 는 두 개의 서로 다른 구역 이기 때문에 그 중에서 각자 의 값 이 저장 되 어 있 습 니 다.
창고 메모리
값.
공간
3
공간
3
var b = 4;  //   b  

창고 메모리
값.
공간
3
공간
4
돌변 할 수 없다
기본 형식 데이터 의 값 은 돌변 할 수 없습니다. 그들의 모든 수정 은 새로운 메모리 공간 을 열 어 새로운 값 을 저장 합 니 다. number, boolean 과 같은 유형 에 있어 다음 과 같은 과정 은 매우 자 연 스 럽 습 니 다.
var a = 3;

창고 메모리
값.
공간.
3
a = 4;

창고 메모리
값.
낡은 공간
3
새 공간
4
그러나 string 유형 에 있어 이해 하기 어렵다. JS 는 string 에 많은 부분 적 인 수정 작업 (엄 밀 히 말 하면 String 포장 유형의 방법) 을 제공 했다. 예 를 들 어 concat, slice 등 이다. 그러나 기초 가 좋 은 친구 들 도 이런 방법 으로 문자열 을 수정 하려 면 반드시 반환 값 을 받 아야 한 다 는 것 을 알 아야 한다.
var str = "hello";
var str = str.slice(0,2);  //      ,     

창고 메모리
값.
낡은 공간
“hello”
새 공간
“he”
즉, string 형식의 값 도 변 하지 않 습 니 다. 아래 와 같은 동작 은 무효 입 니 다.
var str = "hello";
str[0] = "e"; //              
console.log(str);  //     "hello"

따라서 JS 가 문자열 에 제공 하 는 색인 읽 기 API (String. charAt () 는 접근 에 만 사용 할 수 있 고 문자열 수정 에 사용 할 수 없습니다.
데이터 형식 과 메모리 더미 참조 (Heap)
JS 의 대상 과 배열 은 모두 전형 적 인 인용 형식 데이터 입 니 다. 인용 유형 변 수 는 포인터 입 니 다. 포인터 의 값 (주소) 은 스 택 메모리 에 저장 되 고 지침 은 메모리 의 특정한 구역 을 가리 키 며 왜 인용 유형 은 할당 만 으로 는 복사 할 수 없 는 지 이해 하기 어렵 지 않 습 니 다.
var obj = {};
var obj2 = obj;
obj === obj2; // true

창고 메모리
값.
obj
가리 키 는 블록 A
obj2
가리 키 는 블록 A
이 는 할당 작업 이 변수 obj 2 에 새로운 공간 을 열 어 주 었 음 을 나타 낸다. 그러나 실제 적 으로 변수 obj 와 같은 포인터 값 을 저장 하고 쌓 인 구역 의 같은 메모리 공간 을 가리킨다.따라서 우리 가 각각 obj 와 obj 2 로 대상 속성 을 수정 할 때, 우리 가 방문 한 것 은 같은 무더기 의 데이터 이다.따라서 = = = = = = = = = = 연산 자 를 사용 하여 두 변 수 를 비교 할 때 값 에 따라 비교 하기 때문에 되 돌아 오 는 결 과 는 항상 true 입 니 다.
따라서 인용 형식의 데이터 에 대해 할당 작업 은 복사 가 완료 되 지 않 습 니 다.

좋은 웹페이지 즐겨찾기