name = 'nero'
wrapper 함수의 스코프에서 var name을 찾아보고 어? 없네?
전역에 있는 var name이 있구만 name을 nero로 변경해야지
이후 log 함수를 호출하고 log 함수의 스코프에서 var name을 찾아보고 어? 없네? 전역에 있는 var name을 콘솔 출력 해야지 ~
그래서 nero
하지만 var를 붙이면?
같은 절차대로 wrapper 함수의 스코프에서 var를 찾아보고 스코프 내의 name을 nero로 변경한다. 따라서 전역에 있는 var name = 'zero'는 건들지 않게 됨!
그 후 log 함수를 호출하고 log 함수의 스코프로 이동해서 console.log를 하는데 var name이 없네? 그럼 상위에 있나? 전역에 var name이 zero 라고 값이 있구나 그럼 이걸 출력해야지 ~
따라서 zero가 출력됨
렉시컬 스코프 = 정적 스코프 코드가 적힌 순간 스코프가 정해지는 것
코드는 코드 그 자체이다.
기능이 똑같다고 해서 그냥 치환해버리면 안된다
log 함수가 console.log(name)을 한다고 해서 log()가 console.log(name)라고 보면 큰일난다!!
log 안의 name은 wrapper의 var name에 영향을 받지 않는다
function도 var와 마찬가지로 동작한다, 똑같이 스코프를 적용 받음!!
이러한 방식을 정적 스코핑, 렉시컬 스코프 말한다
코드를 쓰는 순간 값이 다 정해지기 때문에 정적 스코핑
동적 스코핑은 가장 최근에 실행되었던 함수의 스코프를 따른다
만약 동적 스코핑이라면 log는 wrapper의 스코프를 따른다
태현님 항상 노력하는 모습 배신하지 않을겁니다. 응원합니다!