20210325 꼭 알아야할 js_33Concepts01

2 분 소요

33 Concepts Every JavaScript Developer Should Know (by leonardomso)

예전에 유튜브 영상을 보다가 나중에 봐야겟다하고 저장해둔 영상을 이제서야 발견해서 공부하고자 한다.


Call Stack

  • Call Stack : 자바스크립트가 함수 실행을 핸들하는 방법 중 하나.
  • 책을 쌓는 것 처럼 자바스크립트 함수를 스택위에 올리고 함수를 다 실행하면 제거 함


  • 일반 함수인 경우
    • 함수를 return이 나와야 끝나는 것임
    • 크롬 개발 툴 sources의 call stack을 확인해 보면
    • anonymous(zero 호출 대기) - zero(one 호출 대기) - one(two 호출 대기) - two(three 호출 대기) - three(console 호출대기) - console호출 해서 값 출력(three 제거 대기) - three 제거(two 제거 대기) - two 제거( one 제거 대기) - one 제거 ( zero 제거 대기) - zero 제거 (anonymous 제거 대기 또는 다음 호출 대기) - anonymous 종료 또는 다음 호출
    • 중간에 에러를 만나면 모든 실행을 중단시키고 에러를 반환하고 에러전에 있던 모든 콜 스택을 알려줌
      • 콜스택 확인 방법 : 주의) 절대로 live server로 키지 말고 그냥 html을 browser에서 실행시키자. live sever 실행시 크롬 익스텐션이 관여하는 것 같았다. (덕분에 엄청 해매서 시간 많이 뺐겼다. 그래도 결국엔 찾아 내고 만다!)



즉, 리스트가 존재하고 함수는 리스트에 추가되고 실행이 완료되면 함수는 리스트에서 제거 된다.

추가적으로 arrow 함수 일 경우에는 변수 하나씩 모두 보고 진행 함

그리고 함수가 서로 참조되어 무한 콜스텍을 쌓을 경우 맥시멈 콜스택 제한에 의해서 에러를 뿜음

Arrow function vs Function

Arrowfunction vs function by개발아저씨들 힘을 모아

  • this
  • 선언할 때 결정되는 것은 클로져
  • this의 값은 함수를 호출하는 방법에 의해 결정된다. (누가 호출한 객체 = this)
  • 함수의 this 값이 함수가 어떻게 호출되었는지 상관 없이 설정할 수 있는 bind메소드가 있음
    • 호출 방법과 무관하게 this를 호출되는 함수와 this가 무엇인지 엮어줌
  • Arrow는 변수가 선언된 위치를 this로 하고 , 일반 함수는 호출된 장소에 따라 다르다. (추가적으로 usestrict에 따라 또 다르다)


  • arguments
    • 일반 함수는 arguments라는 array형태를 띠는 객체가 있는데 인자들을 받아와야만 인자들에 접근 가능하다.
    • 하지만, Arrow 함수는 arguments 사용시 인자가 없으면 외부 함수에서 들어오는 것을 가져다 쓸 수 있다.


Primitive type

undefined vs null vs NaN

undefined : 정의 되지 않음 null : 존재하지 않는다(존재하지 않는다라는 값) NaN : 숫자가 아님 (숫자 연산이 망가진 경우)


Value Types and Reference Types

let a = 50; // a = 50
let b = a; // b = a = 50 (참조가 아니고 복사라고 봐야 됨)

a = 10; // a = 10 ( 그래서 여전히 b = 50)

console.log(b); // 50
const sexy = ['go', 'come'];
const pretty = sexy;

sexy.push("want");

console.log(pretty); // go come want 참조 되어 원래의 값에 영향을 줌 

pretty.push("wish");

console.log(sexy); // go come want wish 즉, 서로 참조하고 있음
console.log([10] === [10]); // false 각각 다른 메모리에 할당 되기 때문에

const x = {
  a: 'hello'
}

const b = x;

b.a = "ok";

console.log(x); // ok
  • 참조는 array, object, function에서만 !


  • 오늘은 callstack 보는 법 때문에 시간을 엄청 썻던것 같다. 결국에는 찾았지만…
  • 또 Arrow function의 차이점, this가 달라지는 상황을 이해하기 힘들어서 시간을 많이 들인것 같다.