블록레벨 스코프, 스코프 체인과 관련해 궁금한 점이 있습니다.
111
작성한 질문수 1
if (true) {
let y = 'hi';
function test() {
console.log(y);
}
}
console.log(y); // ReferenceError: y is not defined
test(); // hi위 코드 실행 시 console.log(y)는 참조 에러, test()는 'hi'가 출력되어집니다.
제가 알기론 자바스크립트는 코드 블럭이 아닌 함수에 의해서 지역 스코프가 생긴다(함수 레벨 스코프)고 알고 있습니다. 따라서 if문(블록문) 내에 정의한 test 함수를 전역에서 호출해도 에러가 발생하지 않는 것이고요.
let, const 키워드로 선언한 변수의 경우 블록 레벨 스코프를 가지기 때문에 전역에서 y 변수 참조 시 참조 에러가 발생하는 것도 이해할 수 있습니다.
제가 궁금한 것은
test 스코프의 상위 스코프는 전역 스코프가 아닌지?
test 스코프의 상위 스코프가 if문 블록 스코프라면 전역에서 test함수 호출 시 참조에러가 발생해야하는거 아닌가요?(엄격 모드일 경우 참조에러 발생, 비엄격 모드일 땐 위 처럼 'hi'출력)그렇다면 test 함수 내에서는 y를 참조할 경우 test 함수 내부에 y가 있는지 찾은 후 없기 때문에 스코프 체인에 따라 전역에 y가 있는지 찾고 이 경우에도 없기 때문에 참조에러가 발생해야하는 것이 아닌지? 어떻게 블록 레벨의 'hi'를 찾을 수 있는지?
입니다.
잘못된 개념이 있다면 알려주시면 감사하겠습니다 ㅜㅜ
답변 0
[46강] EventEmitter를 활용한 10가지 패턴 중 플러그인 아키텍처
0
13
2
강의가 누락된것 같습니다.
0
32
2
용어 발음법이 계속 바뀌는 것 같은데 이런 부분들 개선이 가능할까요...?
0
41
1
counter01.html은 어디있을까요?
1
16
1
존재하지 않는 일기 url입력 시 alert이 두 번 떠요
0
35
1
useState 직접 구현 부분에서 질문이 있습니다.
1
43
1
학습을 하고 블로그에 정리를 해도 괜찮을까요?
1
41
1
교재(3쇄)와 강의 내용 문의
0
35
2
섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.
0
23
1
call stack 표현이 잘못표현된것이 아닌가요?
0
79
2
React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.
0
35
1
일반 강의와 차이점?
1
57
1
!= 연산자의 역할
0
35
1
중요하진 않지만 설명하신부분에서 안된부분..
1
39
1
강의 듣는 순서가 어떻게 되나요?
0
53
1
stopPropagation()에 대해서 질문 있습니다.
0
52
2
12.13) 하단 여백 스타일링 관련 질문 드립니다.
0
67
2
27강 Context내 RSC 사용 관련 문의
0
88
3
혹시 다음 강의 제작 예정된 것들이 있을까요?
0
94
1
Enable Linting 항목을 찾을수가 없습니다.
0
48
2
에러 질문드립니다
0
64
2
1강 질문
0
73
2
윈도우에서는동작줄이기가어디에있을까요??
0
39
1
백오피스를 개발할 때 아키텍처 구성에 대한 질문
0
63
3





