오늘은 이틀에 걸쳐 푼 koans 내용들에서 새롭게 알게된 점을 적어보려한다.
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);
});
위의 문제에서 아래의 세 문제가 이해가 안가서 같은 동기님에게 여쭤보았다.
아래 세 문제는 전역에 존재하여 전역스코프의 값들을 받아온다.
age는 첫번째 줄 let age = 27; 의 값을 받아왔고,
name은 outerFn()에서 키워드 없이 선언된 name = "Jimin"; 이
outerFn() 스코프에서 전역스코프에 선언되어있던 let name = "Jin" 을 재할당 하여
전역 스코프의 name은 "Jimin"이 되므로 "Jimin"이 들어오게된다.
innerFn()의 리턴값은 outerFn()의 내부함수인 innerFn()의 리턴을 보면
return height; 이므로 outerFn()의 스코프의 height값 178이 리턴이 되어
outerFn()의 실행이끝나고 리턴값은 innerFn이 나오게된다.
따라서 innerFn()의 리턴값은 178이 나오게된다.
구조분해할당은 더 계속 공부를 해봐야할 것 같다...
너무 어려운것...