-
스코프 (Scope)
- 유효 범위
- 동일한 식별자 충돌 방지
- 변수나 함수 선언 위치에 따라 스코프 지님
var str = “더하기”; function sum(num1, num2){ str = “sum 함수 스코프”; return num1 + num2; } sum(10, 20); console.log(str);
= str함수 출력 x sum 함수 출력 o
함수 레벨 스코프 (function-level scope)
- 함수 안에 선언한 변수 => 지역 변수
- 함수 외부에서 해당 변수 호출 시 오류
var str = "전역 스코프"; function fnScopeTest(){ var str = "지역 스코프"; console.log(str); } fnScopeTest(); // 지역 스코프 console.log(str) // 전역 스코프
let str = "전역 스코프"; function fnScopeTest(){ let str = "지역 스코프"; console.log(str); } fnScopeTest(); // 지역스코프 console.log(str); // 전역스코프
conet str = "전역 스코프"; function fnScopeTest(){ conet str = "지역 스코프"; console.log(str); } fnScopeTest(); // 지역스코프 console.log(str); // 전역스코프
블록 레벨 스코프 (block-level scope)
- 블록 내에서 접근 가능한 스코프
- { … }
{ var str = "지역 스코프"; } console.log(str); // 지역스코프
=var는 블록레벨 스코프가 아님
{ let str = "지역 스코프"; } console.log(str); // ReferenceError
{ let str = "지역 스코프"; console.log(str); // 지역 스코프 }
=let 블록레벨 스코프를 가진다 + const와 동일
var str = "전역 스코프"; function scopeTest() { var str = "지역 스코프"; //재선언 및 재할당 var str2 = "지역 스코프2"; console.log(str); console.lod(str2) } console.log(str); // 전역 스코프
var str = "스코프"; function scopeTest() { var str = "지역 스코프"; //재선언 및 재할당 var str2 = "지역 스코프2"; console.log(str); console.lod(str2); } console.log(str); // 전역 스코프 function scopeTest2() { console.log(str2); // str2 is no defined } scopTest(); scopeTest2();
var
let str = "스코프"; function scopeTest() { let str = "지역 스코프"; //재선언 및 재할당 let str2 = "지역 스코프2"; console.log(str); console.lod(str2); } console.log(str); // 전역 스코프 function scopeTest2() { console.log(str2); // str2 is no defined } scopTest(); scopeTest2();
전역스코프와 지역스코프
var globalScope = "전역 스코프"; function scopeTest() { var localScope = "지역 스코프"; document.write("scopeTest 함수 내 globalScope ::: "+globalScope+"<br>"); document.write("scopeTest 함수 내 localScope ::: "+localScope+"<br>"); } scopeTest(); //scopeTest 함수 내 globalScope ::: 전역스코프); //scopeTest 함수 내 localScope ::: 지역스코프);
var globalScope = "전역 스코프"; function scopeTest() { var localScope = "지역 스코프"; } scopeTest(); document.write("scopeTest 함수 밖 globalScope ::: "+globalScope+"<br>"); document.write("scopeTest 함수 밖 localScope ::: "+localScope+"<br>"); //scopeTest 함수 밖 globalScope ::: 전역스코프); // ReferenceError ; => 지역스코프의 유효한 범위는 지역 내에서만 유효함
var
let globalScope = "전역 스코프"; function scopeTest() { let localScope = "지역 스코프"; document.write("scopeTest 함수 내 globalScope ::: "+globalScope+"<br>"); document.write("scopeTest 함수 내 localScope ::: "+localScope+"<br>"); } //scopeTest(); const globalScope = "전역 스코프2"; document.write("scopeTest 함수 밖 globalScope ::: "+globalScope+"<br>"); // = SyntaxError let과 const는 재 선언이 불가능 하기 때문