[TIL] 자바스크립트 문법 복습

김시원·2023년 4월 12일
0

TIL

목록 보기
1/50

Issues encountered

  • 신규 아이디 추천 문제를 풀면서 정규 표현식을 하루빨리 공부해야겠다는 생각을 했다.
  • Callback, 비동기, Closure 문법에 대해 강의를 다시 들으며 복습하였다. 이런 것도 배웠었나 싶을 정도로 강의 대부분의 내용이 내 머릿속에서 휘발되었다.... 놀랍다

What I did

  • 정규표현식 관련 강의를 하나 듣고, 연습 사이트에서 직접 적용해가며 연습하였다.
  • Promise: new Promise()로 호출한 Promise의 인자로 넘어가는 콜백 함수는 바로 실행된다. 그 내부의 resolve()reject() 함수를 호출하는 구문이 있을 경우, 둘 중 하나가 실행되지 전까지는 다음 (then {})이나 오류(catch())로 넘어가지 않는다
  • Async/Await: async 표시가 된 함수는 await라는 표시를 만나면 멈추고 동작이 완료되면 재개한다
  • Closure function: 외부 함수보다 중첩 함수가 더 오래 유지되는 경우, 중첩 함수는 이미 생명 주기가 종료된 외부 함수의 변수를 "여전히" 참조할 수 있다 -> 상태 (외부 함수의 렉시컬 환경)을 안전하게 은닉하고 변경, 유지하기 위해 사용된다

What I newly learned

  • Connect the local folder to the git repo: https://superuser.com/questions/1412078/bring-a-local-folder-to-remote-git-repo

  • Nullish Coalescing vs. Default Parameter
    전자는 처리하려는 변수가 null이나 undefined일 때만 leftExpression을 처리하고 값이 있으면 rightExpression을 처리한다
    const message = test ?? "Nothing to display yet"
    * 후자로 처리를 하는 경우 undefined일 경우만 처리하고, null값일 때는 처리되지 않는다.

    function printMessage(test = 'Nothing to display yet') {
      console.log(text)
    } 
    
    printMessage('Hello') // Hello
    printMessage(undefined) // Nothing to display yet
    printMessage(null) // null
    		```
    
  • Spread Operator를 사용하여 두 객체를 사용할 때 값을 추가, 변경할 수 있다

    // 두 objects를 합치기!
    // 1
    const shirt = Object.assign(item, detail)
    
    // 2
    const shirt = {...item, ...detail, price: 40} // 기존 값 부분 업데이트 가능 
    
    // 배열 수정하기
    let fruits = ['apple', 'orange']
    let fruits1 = [...fruits, 'banana'] // push()와 동일
    let fruits2 = ['banana', ...fruits] // unshift()와 동일
    let combined = [...fruits1, 'pear', ...fruits2]
  • Optional Chainging

    function displayJobTitle(person) {
        if(person.job && person.job.title) {
            console.log(person.job.title);
        }
    } // 대신에
    
    function displayJobTitle(person) {
        if(person.job?.title) {
            console.log(person.job.title);
        }
    }
    
    // With nullish coalescing
    function displayJobTitle(person) {
        const title = person.job?.title ?? 'No Job Yet';
        console.log(title);
    }
  • 스터디하면서 배웠던 거
    for index in arr에서 index가 string type으로 찍힌다
    투포인터 알고리즘 - 완전 탐색을 수행할 때 시간 초과가 난다면 투포인터 알고리즘 아이디어 생각해보기
    Array를 순회하는 메서드들의 콜백함수의 3번째 인자인 array는 기존의 array를 콜백 안에서 수정할 수 있다
    .some()every(): some은 조건의 일부만 true여도 true를 반환, every는 전체 경우가 true인 경우만 true를 반환
    리마인드! 객체는 프로퍼티와 메서드가 있는데 메서드는 객체 안에서 정의된 함수를 뜻하고, 프로퍼티는 객체 내에서의 데이터들 (함수가 아닌 데이터들)
    JS는 인터프리터 언어이다.
    컴파일 타임에 전체 소스 코드를 한 번에 기계어로 변환 후 실행 파일을 만드는 컴파일러 언어인 Java, C++과는 달리, 인터프리터 언어는 컴파일을 하지 않고 소스 코드를 한 줄씩 읽어들여 실행한다. 컴파일 하는 과정이 없기 때문에 컴파일 하는 시간은 소요되지 않으나, 실행 파일을 별도로 생성하지 않기 때문에 실행시마다 인터프리터 과정이 반복 수행되어 실행 속도가 느리다. (특히 CPU 점유율이 높을 경우). Python도 이에 해당된다.
    JS는 이를 해결하기 위해 JS Engine 최적화 기법 중 하나인 JIT (Just-In-Time)을 도입한다. 기본적으로 처음에 모든 JS 코드를 바이트 코드로 변환하고 실행을 하면서 프로파일링 데이터 수집 및 자주 반복되는 코드 (hotspot)이 있다면 해당 부분에 JIT를 적용한다
    * 더 공부해보고 블로그에 정리해보면 좋을 것 같다.

0개의 댓글