함수가 실행될때, 함수 내에서 변수에 대한 접근이 어떻게 되든지를 나타내는 용어이다. (함수의 실행 컨텍스트 내에서의 변수 환경이 무엇인지) 스코프는 함수를 기반으로 한 용어이다.
변수에 접근할 수 있는 범위
this 키워드 값이 무엇인지를 나타내는 용어이다. 현재 실행 컨텍스트 내에서 어떤 객체를 참조하고 있는지를 의마한다. 컨텍스트는 객체를 기반으로 한 용어이다.
- 스코프 : 함수가 선언되면 무조건 스코프가 생성된다.
- 컨텍스트: 함수가 속해있는 객체가 무엇인지 의미한다. (만약 함수가 글로벌 스코프에서 선언되었다면, 이때의 컨텍스트는 global(window)이다.)
if(5 > 4) {
var secret = '12345';
}
secret // '12345'
function a() {
var secret = '12345';
}
secret; //ReferenceError
{}
이 생성될 때마다 새로운 스코프가 형성되는 것을 의미let
과 const
키워드의 등장으로 블록 스코프를 형성하는 것도 가능해졌다.function loop() {
for(var i = 0; i < 5; i++) {
console.log(i);
}
console.log('final',i);
}
loop();
/*
0
1
2
3
4
final 5
*/
function loop() {
for (let i = 0; i < 5; i++) {
console.log(i);
}
console.log('final', i);
}
loop(); /* ReferenceError: i is not defined */
- 스코프란?
- 변수에 접근할 수 있는 범위
- 함수 실행컨텍스트 내부의 변수 환경
컨텍스트란?
함수스코프란?
- 새로운 함수가 생성되면 새로운 스코프가 발생한다.
- 자바스크립트는 함수스코프를 따르는 언어
- 함수에서 선언한 변수들은 해당 함수 내에서만 접근할 수 있다.
- 블록스코프란?
- 블록이 생성될때 새로운 스코프가 생성
- 자바스크립트는 원래 함수스코프를 따르지만, let과 const의 등장이후로 블록스코프형성도 가능해짐
var
와let,const
를 함수스코프, 블록스코프??
- var => 함수스코프
- let, const => 블록스코프
설명이 너무 잘 되어있네요!! 잘 보고 갑니다!! 감사합니다