참조 자료형

참조 자료형의 데이터는 동적(dynamic)으로 변한다.
참조 자료형을 변수에 할당할 경우, 데이터의 주소가 저장된다.




원시 자료형

원시 자료형 또는 원시 자료형의 데이터를 함수의 인자로 전달할 경우, 값 자체의 복사가 일어난다.
사실 함수의 인자도 변수에 자료(data)를 할당하는 것이다.
함수를 호출하면서 넘긴 인자가 호출된 함수의 지역변수로 (매 호출 시마다) 새롭게 선언된다.

두 코드의 차이 분석하기!

함수의 인자를 넣어두는건, 즉 매개변수 선언과도 같다. 그래서 위 코드는 할당이고, 아래 코드는 함수(year2) <- 인자로 매개변수를 선언하였기에 지역변수이므로 외부에서 내부로 접근할 수 없어졌기에 year2의 값은 그대로 2021이다!


스코프와 클로져


객체와 this

this는 method를 호출하는 시점에 결정된다.
method는 '어떤 객체의 속성으로 정의된 함수'를 말한다.
위의 megalomaniac 객체를 예로 든다면,
getMembers는 megalomaniac 객체의 속성으로 정의된 함수인 '메소드'라고 할 수 있다.
megalomaniac.getMembers()와 같은 형태로 사용(호출)할 수 있다.
사실은, 전역 변수에 선언한 함수도 웹페이지에서 window 객체의 속성으로 정의된 함수라고 할 수 있다.
window. 접두사 없이도 참조가 가능하기 때문에(window.foo()라고 사용해도 된다.), 생략하고 쓰는 것뿐이다.
이렇듯, method는 항상 '어떤 객체'의 method 이다.
따라서 호출될 때마다 어떠한 객체의 method일 텐데, 그 '어떠한 객체'를 묻는 것이 this 이다.
예시로, obj이라는 객체 안에 foo라는 메서드를 선언하고, this를 반환한다고 했을 때 ( 예: let obj = {foo: function() {return this}}; )
obj.foo() === obj 이라는 코드에 true라고 반환할 것 이다.
this는 함수의 호출에 따라서 값이 달라지기도 한다.
그러나 화살표 함수는 다르다.
자신의 this가 없다.
화살표 함수에서의 this는 자신을 감싼 정적 범위(lexical context)이다. (전역에서는 전역 객체를 가리킨다.)
일반 변수 조회 규칙(normal variable lookup rules)을 따르기 때문에, 현재 범위에서 존재하지 않는 this를 찾을 때, 화살표 함수 바로 바깥 범위에서 this를 찾는다.
그렇기에 화살표 함수를 사용할 때, 이러한 특이점을 생각하고 사용해야 한다.

Object.assign(target, source)

'Object.assign'을 통한 복사는 reference variable은 주소만 복사한다.
Object를 함수의 인자로 전달할 경우, reference가 전달된다.

.repeat()


spread (전개문법)

배열에 전개문법을 사용해보기

객체에 전개문법 사용해보기

함수의 인자를 배열로 다루어 보기

Object.keys(),Object.values()

Array.from ,

마지막에 Array.isArray(argumentsObj) 가 왜 false인지 잘 이해해보기!

Rest Parameter는 인자의 일부에만 적용할수도 있다

구조 분해 할당

배열을 분해한다

rest/spread 문법을 배열 분해에 적용할 수 있다

const[first, ...middle, last] = array 와 같은 문법은 사용할 수 없다! 할당하기 전 왼쪽에는, rest 문법 이후에 쉼표가 올 수 없다!!

객체를 분해한다

rest/spread 문법을 객체 분해에 적용할 수 있다

profile
개발 재밌다

0개의 댓글