[SEB_FE] javascript koans

seunghyo·2023년 3월 7일
0

SEB_FE

목록 보기
13/38

겪은 문제와 해결점


내가 배웠던 내용이지만 실제 코드로 적용해보니 제법 까다롭다고 생각되는 부분이 많았다 특히 4번 문제와 8번 문제가 관건이었다.

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

    function outerFn() {
      let age = 24;
      name = 'jimin';
      let height = 178;

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

      innerFn();

      expect(age).to.equal(26);
      expect(name).to.equal('jimin');

      return innerFn;
    }

    const innerFn = outerFn();

    expect(age).to.equal(27);
    expect(name).to.equal('jimin');
    expect(innerFn()).to.equal(178);
  });
});

상위 스코프의 바로 하위 스코프에서 let으로 name이라는 변수가 선언되었다면, 상위 스코프에서 name의 값은 그대로이다. 하지만 let을 사용하지 않고 바로 name에 다른 값을 할당한다면, 상위 스코프의 name 값도 바뀔 것이다.

 it('Object를 함수의 전달인자로 전달할 경우, reference가 전달됩니다.', function () {
    const obj = {
      mastermind: 'Joker',
      henchwoman: 'Harley',
      relations: ['Anarky', 'Duela Dent', 'Lucy'],
      twins: {
        'Jared Leto': 'Suicide Squad',
        'Joaquin Phoenix': 'Joker',
        'Heath Ledger': 'The Dark Knight',
        'Jack Nicholson': 'Tim Burton Batman',
      },
    };

    function passedByReference(refObj) {
      refObj.henchwoman = 'Adam West';
    }
    passedByReference(obj);
    expect(obj.henchwoman).to.equal('Adam West');

    const assignedObj = obj;
    assignedObj['relations'] = [1, 2, 3];
    expect(obj['relations']).to.deep.equal([1,2,3]);

    const copiedObj = Object.assign({}, obj);
    copiedObj.mastermind = 'James Wood';
    expect(obj.mastermind).to.equal('Joker');

    obj.henchwoman = 'Harley';
    expect(copiedObj.henchwoman).to.equal('Adam West');

    delete obj.twins['Jared Leto'];
    expect('Jared Leto' in copiedObj.twins).to.equal(false);

   
  });
});

여기서 페어분과 내가 의문이었던 점은 copiedObj.henchwoman이 obj.henchwoman의 영향을 받지 않는데 , obj.twin의 변화에는 영향 받았다는 점이었다.object는 참조 자료형이기에 주소가 복사되지만, 여기 copiedObj은 assign을 통해 새 객체에 할당해주었기에 별도의 객체로 보았다. 다만 twins라는 속성이 객체이기에, 그 객체로 이어지는 주소를 속성의 값으로 갖고있기에 twins에는 영향을 받는다고 생각했다. 이부분은 고민을 더 해보아야 겠다.

0개의 댓글