반응형
SMALL
이 글에서 "선언 전"이라는 의미는 단순히 줄의 전 후 관계
변수가 글로벌 스코프인 경우
const App = () => {
return <div style={styles}> </div>
}
const styles = {
display: 'flex'
}
이 코드는 에러가 안난다.
이유는 styles 변수가 이 파일의 글로벌스코프에 있어서, 어디에서든 접근이 가능하다.
심지어 이렇게 실제로 styles를 사용하는, 그것보다 먼저 선언 및 할당 App 함수에서도 사용 가능하다
const와 let은 블록 스코프이지만, 만약 글로벌 스코프에서 정의됐다면 파일 어디에서든지 접근 가능하다.
변수가 렉시컬 스코프인 경우
const App = () => {
const App2 = () => {
console.log(styles);
return <div style={styles}></div>;
};
const styles = { display: "flex" };
return <App2 />;
};
변수가 렉시컬 스코프(클로저)에 의해 styles을, styles 변수가 선언전 함수 내에서 사용해도 에러가 발생안한다.
(클로저는 리턴되는게 App2이므로 App2 함수)
ReferenceError를 발생시키는 경우
const App = () => {
console.log(styles); // ReferenceError: styles is not defined
const styles = {
display: 'flex'
};
return <div style={styles}> </div>
};
이 코드는 얘기가 다르다.
클로저도 아닌, 단순히 변수 자체를 선언 전에 사용하려고 했으니 당연히 ReferenceError를 맞이하게 된다.
반응형
LIST
'JavaScript' 카테고리의 다른 글
모던 자바스크립트 - 14(전역변수의 문제점), 15(let, const 키워드와 블록 레벨 스코프) (0) | 2023.03.29 |
---|---|
원시값을 변수에 할당할 때 어떤 현상이 일어나는가? (0) | 2023.03.28 |
모던 자바스크립트 - 9(타입 변환, 단축 평가), 10(객체 리터럴), 11(원시값과 객체 비교) (0) | 2023.03.15 |
for loop과 forEach 중에 어떤 것이 더 퍼포먼스가 좋을까? (0) | 2023.03.14 |
자바스크립트에서 var로 선언하면 자동으로 전역객체 window로 등록되니? (0) | 2023.03.09 |