본문 바로가기

전체 글48

Primitive / Reference 퀴즈 Q1) const person = { age: 30 }; const something = person.age; person.age = 50; console.log(something); // ? 예상 답 : 30 예상 이유 : person은 참조형타입인 객체이고 person.age는 원시타입인 숫자이다. 따라서 sometihg에도 원시타입인 30이 저장되고 이후에 person.age값이 바뀌어도 따라서 바뀌지 않는다. 정답 : 30 Q2) let one = { name: "one" }; const two = { name: "two" }; const something = one; one = { name: "ONE" }; console.log(something); // ? 예상 답 : "ONE: 예상 이유 :.. 2021. 12. 27.
Call by value / Call by reference Call by value (값의 복사) Call by value는 값이 그대로 복사되는 방식이다. JS에서는 Primitive데이터타입이 Call by value 방식이 사용된다. let a = 50; let b = a; // a의 값을 복사해서 b에 대입 console.log(`a:${a}, b:${b}`); // 50, 50 b = 100; console.log(`a:${a}, b:${b}`); // 50, 100 실제로는 b가 a와 같은 메모리주소값을 갖게되는 것이지만 표면적으로는 값을 그대로 복사해서 가지게 되는 형태이다. function swap(val1,val2) { let temp = val1 val1 = val2; val2 = temp; } let a = 1, b = 2; swap(a,b).. 2021. 12. 27.
콜스택 / 메모리힙 구조, 데이터저장 / 참조 원리 이 글은 카레유님의 글을 보고 공부한 내용을 작성하였습니다 [자바스크립트] 콜스택/메모리힙 구조, 데이터 저장/참조 원리 (tistory.com) 콜스택, 메모리힙이란? JS는 콜스택과 메모리힙이라는 메모리 구조를 통해 데이터 및 코드 실행을 관리한다. 1. 콜스택(Call stack) 원시타입 데이터가 저장된다. 실행컨텍스트(Execution Context)를 통해 1)변수 식별자(이름) 저장 2) 스코프 체인 및 this관리 3)코드 실행 순서관리 등을 수행 2. 메모리힙 참조타입 데이터가 저장된다 힙은 용량이 유연하게 늘어날 수 있다. 콜스택, 메모리힙의 데이터 구조 1. 원시타입 데이터(파란색 변수a) 10이라는 값은 원시타입이므로 콜스택에 저장된다 변수 a에는 10이 저장된 콜스택 메모리의 주소.. 2021. 12. 27.
메모리 구조 / 변수 생성원리 / 가비지컬렉터 이 글은 카레유님의 글을 참조해서 작성하였습니다. https://curryyou.tistory.com/ 카레유 여행, 맛집, 역사, IT 프로그래밍에 관심이 많습니다. HTML, CSS, JavaScript, Android, Java, Kotlin, Python 을 주로 개발합니다. curryyou.tistory.com 메모리 구조, 데이터 저장/참조 원리 1. 메모리 구성 컴퓨터 메모리는 1byte(8bit) 크기의 메모리셀 여러개로 구성된다. 2. 메모리 셀 각 메모리 셀은 고유한 주소값을 가지며 메모리셀(1byte)단위로 데이터를 저장하고 읽는다. 3. CPU와 메모리 역할 CPU는 메모리에 저장된 값을 꺼내와 연산하고 연산 결과를 다시 메모리에 저장한다. 4. 데이터 저장 방식 용량이 큰 데이터는.. 2021. 12. 27.
Primitive / Reference Primitive 타입 자료형 string Boolean Number NUll undefined symbol Primitive 타입 자료형은 값의 '모양'이 같다면 서로 같은 값이다. let a = 10; const b = a; a = 30; console.log(b); 위의 결과는 10이 나온다. 변수(a)로 할당한 값(b)은 이후에 변수값(a)이 바뀌더라도 되돌아가서 할당한 값(b)을 바꾸지 않는다. let b = a;라도 같은 결과이다. Primitive자료형은 값이 재할당되면(바뀌면) 기존메모리주소에 저장된 값을 변경하는 것이 아니라 새로운 메모리를 확보하여 값을 저장하고 변수에 새로운 값이 입력된 메모리주소를 다시 할당한다. let a = 10; let b = 20; a = 20; 위의 코드는 .. 2021. 12. 27.
Scope Quiz Q1) function foo () { var a = 5; for (var i = 0; i < a; i++) { console.log(a); } console.log(i); // 무엇이 출력될까요? } foo(); 예상 답 : 5 예상 이유 : 함수 foo()가 실행되면 a가 선언되고 5가 할당된다. for문에서 i가 선언되고 a가 필요하므로 a를 찾는다. 같은 scope에 a가 선언되어 있으므로 a의 값을 가져와서 for문을 돌린다. console.log(i)에서 i를 찾게되는데 for문은 함수가 아니기 때문에 i는 console.log(i); 문과 같은 scope에 있다. 따라서 error가 아닌 i가 출력된다. 정답 : 5 Q2) var a = 1; function bar () { function .. 2021. 12. 27.