-
스코프(Scope)JavaScript/Basic 2023. 1. 11. 12:54
## 전역 스코프 (Global scope)
코드 어디에서든지 참조할 수 있다.
## 지역 스코프 (Local scope or Function-level scope)
함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조할 수 있다.
var x = 'global'; // 전역변수(Global Variable)
function foo(){
var x = 'function scope';
console.log(x); // 지역변수 (Local Variable)
}
foo(); // function scope
console.log(x); // global
================================
변수는 선언 위치(전역 또는 지역)에 의해 스코프를 가지게 된다.
즉, 전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수이고,
지역(자바스크립트의 경우 함수 내부)에서 선언된 변수는 지역 스코프를 갖는 지역 변수가 된다.
================================================================
대부분의 언어는 블록레벨 스코프를 갖는다.
JS는 let, const가 도입되기 전, 즉 var 변수만 가지고 있을 때는 함수 레벨 스코프 였는데
let, const가 도입된 후 블록 레벨 스코프를 가질 수 있게 됬다.
예를 들어
int main(void) {
// block-level scope
if (1) {
int x = 5;
printf("x = %d\n", x);
}
printf("x = %d\n", x); // use of undeclared identifier 'x',
// x는 if 블럭 안에서 선언이 됬으므로 밖에서는 사용할 수 없다.
return 0;
}
================================================================
var 변수는 함수 레벨 스코프
- 즉, 비블럭 레벨 스코프 라는 뜻인데 함수 밖에서 선언된 변수는 모두 전역 스코프를 갖는다
(코드 블록내에서 선언되더라도)
예시들!!!
1)
var x = 0;
{
var x = 1;
console.log(x); // 1
}
console.log(x); // 1
2)
================================================================
let 변수는 블록 레벨 스코프
let y = 0;
{
let y = 1;
console.log(y); // 1
}
console.log(y); // 0
================================================================
전역 스코프(Global Scope)
전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에 의한 상태 변화로 코드를
예측하기 어렵게 만드므로 사용을 억제하여야 한다.
전역에 변수를 선언하면 이 변수는 어디서든지 참조할 수 있는 전역 스코프를 갖는 전역 변수가 된다. v
ar 키워드로 선언한 전역 변수는 전역 객체(Global Object) window의 프로퍼티
================================================================
var global = 'global';
function foo(){
var local = 'local';
console.log(global);
console.log(local);
}
foo();
// global
// local
console.log(global); // global
console.log(local); // al.js:46 Uncaught ReferenceError: local is not defined at al.js:46:13
================================================================
예를 들어!
// 함수 레벨 스코프 (function -level - scope)
// 즉, 함수 밖에서 선언된 변수는 전역 변수 이다
// // 예시 1
// if(true){
// var x =5;
// }
// console.log(x); // 5
// // 예시 2
// var a = 10; // 전역 변수
// (function(){
// var b = 20; // 함수 안 => 지역변수
// })();
// console.log(a); // 10
// console.log(b); // "b" is not defined
// // 예시 3
// var x = 10;
// function foo(){
// x = 100;
// console.log(x);
// }
// foo(); // 100
// console.log(x); // 100
// var x = 10; // 전역변수
// function foo(){
// var x = 100;
// console.log(x);
// function bar(){
// x = 1000;
// console.log(x);
// }
// bar();
// }
// foo(); //100, 1000
// console.log(x); // 10
var foo = function(){
var a = 3 , b = 5;
var bar = function(){
var b = 7, c = 11;
// 더하기전! 이 시점에서는 a는 3, b는 7, c는 11
a += b + c;
// 더한후! 이 시점에서는 a는 21, b는 7, c는 11
};
// 함수 밖, 이 시점에서는 a는 3, b는 5, c는 undefiend
bar();
// bar()함수를 호출 한 후, a는 21, b는 5
};'JavaScript > Basic' 카테고리의 다른 글
브라우저와 관련된 객체 (0) 2023.01.24 arr.join('') vs str += i (0) 2023.01.16 JS - location 속성 (0) 2023.01.09 JS 데이터 타입 종류 (0) 2023.01.08 Date (0) 2023.01.07