Scope
2023. 12. 26. 15:19ㆍStudy/JavaScript
Scope
scope란 '범위'라는 뜻을 가지고 있습니다. 즉, 스코프란 '변수에 접근할 수 있는 범위'를 말합니다.
자바스크립트는 Lexical Scope다.
- Lexical Scope : 선언된 위치가 상위 스코프를 정한다.
- Dynamic Scope : 실행 위치가 상위 스코프를 정한다.
Lexical Scope
선언된 위치가 상위 스코프를 정한다. 자바스크립트는 Lexical Scope다.
아래 코드에서 functionTwo의 선언 위치 때문에 functionTwo의 numberOne은 3이 된다.
var numberThree = 3;
function functionOne(){
var numberThree = 100;
console.log(`functionOne numberThree : ${numberThree}`); // 100;
functionTwo();
}
function functionTwo(){
console.log(`functionTwo numberThree : ${numberOne}`); // 3
}
functionOne();
// 실행결과
functionOne numberThree : 100
functionTwo numberThree : 3 // ==> 선언된 위치가 상위 스코프를 정한다.
var, let, const keyword
- var : 함수 레벨 스코프만 만들어낸다.
- let, const : 함수레벨 스코프와 블록레벨 스코프를 만들어낸다.
var 키워드는 함수레벨 스코프만 만들어낸다. for, if, while문에서는 스코프가 생성되지 않는다.
그렇기 때문에 아래 코드에서 가장 마지막 줄에 출력될 i의 값은 10이다.
var i = 999;
for(var i=0; i<10; i++){ // var 키워드 사용. 스코프가 만들어지지 않는다.
console.log(i);
}
console.log(`i in global scope ${i}`); // 10
let, const 키워드는 함수레벨 스코프와 블록레벨 스코프를 만들어낸다.
그렇기 때문에 아래 코드에서 가장 마지막줄에 출력될 i의 값은 999이다.
var i = 999;
for(let i=0; i<10; i++){ // let 키워드 사용, 스코프가 새로 만들어진다.
console.log(i);
}
console.log(`i in global scope ${i}`); // 999
'Study > JavaScript' 카테고리의 다른 글
Execution Context (1) | 2023.12.27 |
---|---|
this (0) | 2023.12.27 |
Prototype, Prototype Chain (0) | 2023.12.23 |
Constructor Function 생성자 함수 (1) | 2023.12.23 |
Immutable Objects - extensible, seal, freeze (0) | 2023.12.23 |