프로그래밍/자바스크립트

[인프런] 스코프

초코맛동산 2024. 8. 18. 19:39

1. 스코프란? 

변수, 함수 생성시 해당 변수, 함수가 갖게 되는 유효 범위 

 

 

1.1 전역 스코프(Global Scope)

: 어디서든 변수에 접근 가능한 범위 

 

1.2 지역 스코프(Local Scope)

: 지역을 벗어난 곳에서는 접근 불가능한 범위 

 

const num = 10;

function print() {
    const num = 100;
    console.log(`지역 스코프 ${num}`);
}

print()
console.log(`전역 스코프 ${num}`);

 

 

 

=> print()를 통해 호출된 num은 지역 스코프, 함수 외부의 num은 전역 스코프를 지님.

 


1.2.1 블록 스코프

: 같은 블록에서만 접근 가능한 범위 

 

function print() {
    for(let i = 0; i < 10; i++){
        console.log(`블록 스코프 : ${i}`);
    }
    
    console.log(i);
}

print();

 

 

-> let 키워드는 블록 스코프를 지님. 따라서 for 블록 안의 i는 잘 출력되고, for 블록 밖의 i는 에러가 발생함.  

 

 

1.2.2 함수 스코프

: 해당 함수 내부에서 접근 가능한 범위

 

function print() {
    for(var i = 0; i < 10; i++){
        console.log(`블록 스코프 : ${i}`);
    }
    
    console.log(`함수 스코프 : ${i}`);
}

print();

 

 

 

 

let vs var

공통점) 
1. 변수 선언 키워드

차이점)
1. 같은 이름의 변수를 여러번 선언 O, 기존 선언 값은 무시됨.
-> 프로그램상 오류 유발 및 어디서 어떻게 사용되는지 파악이 어려움.

// let 변수 선언 키워드 사용

let num1 = 10;
let num1 = 100;

console.log(num1);​


// var 변수 선언 키워드 사용

var num2 = 20;
var num2 = 200;

console.log(num2);​


2. var는 함수 스코프. (let은 블록 스코프) 

=> var는 해당 특징들로 인해 프로그래밍상 여러 오류들을 유발할 수 있어서 잘 사용x