DAY 14. Koans

냐하호후·2021년 7월 2일
0
  • const는 재할당이 불가능하다
    하지만 배열이나 객체는 추가/삭제가 가능하다.

Scope.js

  it('lexical scope와 closure에 대해 다시 확인합니다.', function () { 
    let age = 27;
    let name = 'jin'; // --> jimin
    let height = 179;

    function outerFn() {
      let age = 24; // --> 26
      name = 'jimin';
      let height = 178;

      function innerFn() {
        age = 26;
        let name = 'suga';
        return height; //--> 178
      }

      innerFn(); //호출 위로올라감 178리턴됌 

      expect(age).to.equal(26);
      expect(name).to.equal('jimin'); //suga는 지역변수라서 지역을 벗어나면 사용할수 없음

      return innerFn; //또다시 리턴 //이름만 넣은건 호출이아니기때문에 innerFn()함수 전체를 리턴함
    }

    const innerFn = outerFn(); //innderFn은 선언만 됐지 호출은 안됌!!!! 이름이아니라 역할로 구분
//호출과 선언은 다릅니다

/* const innerFn() {
        age = 26;
        let name = 'suga';
        return height; //--> 178
      } */
    expect(age).to.equal(27);  //age는 위에랑 관련이 없음. 전역변수 27. 위에랑 관련이 없음 24,26은 지역벗어나면 못씀
    expect(name).to.equal('jimin');
    expect(innerFn()).to.equal(178); 
  });

lexical scope와 closure에 대해서 잘 모르고 있었다.

함수의 선언과 호출은 다르다.
변수와 함수의 이름이 똑같다고 같은것이 아니다.

원시자료형 vs 참조자료형

  • 원시 자료형 => string, number, bigint, boolean, undefined, symbol, (null) => 값 자체에대한 변경이 불가
  • 참조 자료형 => 객체형(배열,함수,객체) => 변수에 할당할 경우 주소 복사가 일어남

그외

  • arr.slice는 arr의 값을 복사하여 새로운 배열을 리턴한다.

  • 빈 객체의 length는 undefined다 0이아님!!
    객체의 length는 그냥 구할 수 없다.
    Object.keys(obj).length이렇게 obj의 키들을 뽑아내서 키들의 갯수로 키들의 길이를 구해야함

  • arguments를 통해 '비슷하게' 함수의 인자들을 다룰 수 있다.

  • arguments는 모든 함수의 실행시에 자동으로 생성되는 '객체'이다. 배열같이 생긴게 나오지만 배열이아니다. 배열 메소드를 사용할 수 없다.
    Array.isArray에 넣어보면 false가 나온다

profile
DONE is better than PERFECT

0개의 댓글