ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • javascript를 쓰지만 내가 잘 몰랐던 것들
    javascript 2020. 10. 20. 01:30

    1. null과 undefined

    • 어떤 변수의 값이 undefined(primitive type)이라면, 그 변수의 값이 아직 할당되지 않았음을 의미한다.
    • null == undefined  // true
    • null === undefined // false
    • 아직 선언하지 않은 변수이름에 대해 
      typeof x === 'undefined' // true
    • null은 "어떤 값이 의도적으로 비어있음을 표현"한다.
    • 즉 null은 undefined와 달리, 존재하는 변수의 값을 나타내는데에 쓰며
      값이 없음(변수가 가리키고 있는 객체가 없음)을 나타낼 때 쓴다.
    • typeof null === 'object'
      Object는 null의 상속객체이기 때문에, 하위호환을 위해 typeof null은 'object'이다.
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/null
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/undefined

    2. javascript의 일급함수 (first class function)

    • javascript에서는 함수를 변수에 할당할 수 있다. (변수가 가리키고 있는 객체가 함수일 수 있다)
    • 이때 function을 first class(일급 시민)의 특성을 가진다고 한다고 한다고 한다.
    • 어떤 변수가 함수를 가리키고 있을때, 변수이름에 ()을 붙이면 함수가 호출된다.

    3. prototype

    • "Javascript는 Prototype-based language이다."
      모든 객체(Object)들이 prototype object를 가지는데,
      이 prototype object은 "메소드와 속성을 상속받기위한 템플릿"의 역할을 합니다.
    • Object A (- prototype A)
      extends Object B (- prototype B)
      A가 B를 상속받으면, prototype A는 prototype B의 메소드와 속성을 상속받는다.
      이런 prototype들의 상속 관계를 prototype chain으로 부른다.
      prototype chaining으로 인해 javascript에서는 상속받은 Object들의 메소드와 속성을 사용할 수 있게 된다.
    • 어떤 Object를 상속받는다는 것은, 그 Object의 prototype을 상속받기 위함이다.
      왜냐, 상속을 통해 받을 수 있는 메소드와 속성은 Object의 prototype에 있는 것들만이기 때문
    • 객체 생성자에는 prototype 속성이 있고, 생성자를 통해 만들어진 객체 인스턴스는
      prototype 속성을 통해 prototype chain에 접근할 수 있습니다.
    • Object.getPrototypeOf(obj) 혹은 (deprecated) obj.__proto__ 를 통해 접근하는 것은 
      obj, 즉 생성자를 통해 생성된 개별 객체의 속성이며, ex) var obj = new Object()
      객체 생성자의 속성을 지칭하지는 않는다. 다만 그 둘의 반환값이 동일할 뿐.
      Object.getPrototypeOf(new Foobar()) == Foobar.prototype
    developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes

    4. function

    • 모든 javascript 함수는 Function 객체입니다.
      모든 객체는 Object의 자손입니다

    5. this (추가 필요)

    • this는 strict모드와 비엄격모드에서 다르게 적용된다.
    • 보통 함수를 호출한 방법에 따라 다르게 결정된다.

    6. javascript에서 callback의 의미

    • javascript에서 callback function의 의미란?
    • javascript가 돌아가는 브라우저의 엔진은 single thread로 돌아간다.
    • 따라서 비동기 작업을 처리하기위해서 어떻게 할까?
    • javascript 엔진은 실행하고자 예약된 비동기 함수들을 저장하고 실행하는 구조를 가지고 있다.
    • CallBack Queue를 갖고 있는데, 비동기로 처리해야할 함수들(callback 함수들)은 우선 Queue에 저장되고,
      지금 thread가 처리해야할 것들이 없으면(call stack이 비어있는 상태) Callback Queue에 있는 비동기로 처리하고자 약속한 함수들을 하나하나 꺼내 실행한다.
    • 이렇게 동기로 처리해야할 프로세스와 비동기로 처리해야할 프로세스를 꺼내고 실행하고 저장하는것을 javascrtip엔진의 EventLoop으로 부른다.
    • callback이란 프로그래밍하는 입장에서는 비동기로 나중에 처리하고자 예약해 놓는 함수으로 생각할 수 있지만
      javascript 입장에서는 비동기 그 자체(?) 일것이다.

    7. Promise와 async await

    • Promise는 뭐일까?
    • Promise는 비동기의 결과를 성공이든 실패든 상관없이 저장하고 있는, 감싸고 있는 객체이다.
    • 비동기 프로세스의 결과가 성공일지, 실패일지는 이 비동기의 결과물인 Promise를 까봐야 알 수 있다.
    • 어떻게 보면, 비동기 작업의 결과를 Wrapping? 하는 것으로도 생각할 수 있을듯.
    • Promise 객체는 Executor 함수를 담고 있는데, 이 Executor 함수의 구조는 어떤 실행과, 그 실행이 성공했을 때 호출할 함수, 실패했을 때 호출할 함수를 담고있다.
    •  

    댓글

Designed by Tistory.