✨데브코스 1일차✨

sincerity developer·2023년 6월 2일
1

데브코스

목록 보기
2/5

자바스크립트 스코프

  • 스코프 정의

    식별자가 참조될 수 있는 범위.. (게임으로 치면 사정거리?라고 생각하자!)

  • 스코프 종류

    👉 전역 스코프 : 코드 상 모든 위치에서 접근이 허용된 식별자를 뜻함.
    👉 지역 스코프 : 코드 상 제한된 위치에서 접근이 허용된 식별자를 뜻함.

  • 지역 스코프

    👉 블록 스코프 : 함수를 포함한, if문, for, switch문 등에 있는 모든 블록안에서 지역변수로 작동하는 식별자를 의미한다. (let const)
    👉 함수 스코프 : 저 많은 블록중에, 딱 함수안에서만 블록으로 작동하는 식별자를 의미한다.(var 키워드)


// 블록 스코프 
{
	let a = 10;
  	console.log(a); // 10
}
console.log(a); // a is not defined(블록 밖에서 접근 못 함)

{
	const number = 11;
  	console.log(number); // 11
}
console.log(number); // number is not defined(역시 스코프 밖에서는 접근 불가 
let printNum = () => {
	let number = 4;
}
console.log(number); // number is not defined(함수도 블록이라 접근 못 함)


// 함수 스코프 : 함수 제외하고는 모두 전역변수 
{
	var value = 4;
}
console.log(value); // 4 (일반 블록에선 전역변수) 

function printVarNum {
 	// var이 es6이전 문법이기 때문에, 함수도 es5에 맞춰서 했습니다.
  	var a = 4;
}
console.log(a); // 함수 안에서는 a도 지역변수이기 때문에 a is not defined! 
  • 스코프 체인 (scope chain)

    해당 레벨에서 식별자를 찾을 수 없을 때, 바로 에러를 내지 않고, 계속해서 찾을 때 까지(전역변수 위치까지) 올라가서 식별자를 찾는 것을 의미한다.

  • {
      let a = 4; // block level && 상위 레벨 
      {
      	console.log(a); // 4
        // 분명 이 블록안에는 a가 선언되어 있지 않다. 
        // 하지만 error를 내지 않고, 상위 scope에서 a가 있는지 찾는다.! 
        // let a = 4; 가 선언할당이 되어 있어서 상위에서 찾아서 출력한다.
      }
    }
    ``
  • 함수의 상위 스코프 찾기

    함수는 애매하다...
    과연 선언된 곳을 기점으로 상위 스코프를 찾아야 할 지!
    아니면 호출된 곳을 기점으로 상위 스코프를 찾아야 할 지

  • 동적 스코프

    함수의 호출 시점을 기점으로 해서 상위 스코프를 찾는 방법

  • 정적(렉시컬) 스코프

    함수의 선언 시점을 기점으로 해서 상위 스코프를 찾는 방법
    ❗️자바스크립트는 함수의 상위 스코프를 찾을 때 이 방법을 사용함❗️

  • var let const (스코프 차이 정리!)

    var : 함수 스코프 (함수를 제외하곤 싹 다 전역변수)
    let, const : 블록 스코프 (함수❗️포함❗️한 블록에서 지역변수이고 블록 밖에서만 전역변수

profile
열심히 할 필요없이 그냥 일단 하면된다!

0개의 댓글