본문 바로가기

Web

Scope

참고문서 : https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html

 

[JavaScript] 호이스팅(Hoisting)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

참고문서 : https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e

 

https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e

 

www.zerocho.com

함수레벨 스코프 (var)

  • 전역변수
  • 함수 밖에서 선언한 함수 스코프 변수는 전역 범위를 가지고, 함수 안에서 사용하면 함수 밖을 제외한 내부 어디서든 접근이 가능합니다.

 

블록레벨 스코프 (let, const)

  • 지역변수
  • 블록은 0개 이상의 구문(statement)을 묶기위해 사용하고, 중괄호{}로 경계를 구분합니다.
  • 블록 스코프 변수는 함수 밖에서 선언하면 함수 스코프 변수처럼 전역 접근할 수 있습니다.
  • 블록 안에서 선언하면 자신을 정의한 블록과 하위 블록에서만 접근이 가능합니다.

 

스코프체인

var x = 'global';
function ex() {
  x = 'change';
}
ex();
console.log(x); // 'change'
  • 변수의 범위를 호출한 함수의 지역 스코프부터 전역 변수들이 있는 전역 스코프까지 점차 넓혀가며 찾습니다.
  • 이렇게 꼬리를 물고 계속 범위를 넓히면서 찾는 관계를 스코프 체인이라고 부릅니다.

 

lexical scoping

var name = 'zero';
function log() {
  console.log(name); //nero
}

function wrapper() {
  name = 'nero';
  log();
}
wrapper();
var name = 'zero';
function log() {
  console.log(name); // zero
}

function wrapper() {
  var name = 'nero';
  log();
}
wrapper();
  • 스코프는 함수를 선언할 때 생성
  • 렉시컬 스코프란 함수를 어디서 호출했는지가 아닌 함수를 어디서 정의했는지에 따라 스코프를 결정하는 것을 말한다
  • log 안의 name은 wrapper 안의 지역변수 name이 아니라, 전역변수 name을 가리킨다.
  • 함수를 처음 선언하는 순간, 함수 내부의 변수는 자기 스코프로부터 가장 가까운 곳(상위 범위에서)에 있는 변수를 계속 참조하게 됩니다

'Web' 카테고리의 다른 글

this와 binding  (0) 2022.03.19
Event Loop  (0) 2022.03.19
웹페이지 동작 원리 & 브라우저 랜더링 과정  (0) 2022.03.18
Vanilla Javascript 라우터 구현  (0) 2021.09.27
Vanilla Javascript Component Core 구현  (0) 2021.09.26