스코프(scope)변수참조의 유효범위이다.
스코프는 전역스코프와 지역스코프 두가지로 나뉜다.
전역스코프 : 전역스코프는 블록 바깥이나 함수 바깥에 선언된 변수로 전역스코프에서 변수를 선언하면 어떤위치의 코드에서든지 사용할 수 있는 변수가 된다.
지역스코프 : 지역스코프는 코드의 특정 부분에서만 사용할 수 있는 변수로
함수스코프와 블록스코프 두가지로 나뉜다.
함수스코프 : 함수스코프란 말그대로 함수 내부에서 선언된 변수로 당연하게도 함수내부 에서만 접근이 가능하다.
블록스코프 : 블록스코프도 말그대로 블록,조건,박복문내에서만 사용가능한게 정상. but, 지금은 잘 안쓰이는 var는 바깥에서도 접근사용이 가능하다.
전역스코프 = global scope 전체 다를 의미한다.
ex ) let x = 0 글로벌 스코프내 존재
let y = 0 글로벌 스코프내 존재
const scopeTest = function() {
let z=2;
console.log(x);
console.log(y);//함수 내부는 지역스코프이다.
};
console.log(x);
onsole.log(y);
전역스코프내에서 존재하는 변수들은 지역스코프 내에서도 참조 가능하다.
지역스코프 = local scope
ex ) let x = 0 글로벌 스코프내 존재
let y = 0 글로벌 스코프내 존재
const scopeTest = function() {
let z=2; < 지역스코프 내에서 변수 선언
console.log(x);
console.log(y);//함수 내부는 지역스코프이다.
};
console.log(z); < 전역스코프에는 z라는 변수선언이 되어있지않아 undefined가 뜬다.
지역스코프의 경우함수레벨 스코프 : 선언된 함수 내부의 스코프를 말한다.
const sum = function () {
var x = 0; //함수내에 x선언되어있어
}
console.log(x) //시 undefined가뜬다
블록레벨 스코프
ex ) if(){} , for(let i=0;i<.length;i++){} 등
if() {var y = 0;}
console.log(y);
var키워드의 경우 블록레벨 스코프에서는 따르지않는다. 그러므로 정상적으로 참조된다그러기에 var사용을 지양해야한다.
let 은 블록레벨 스코프를 따른다. 그러므로 안에서 선언된 변수는 밖으로 나가지 못한다.