var vscope = 'global';
function fscope(){
console.log(vscope);
}
fscope();
//결과: global
함수 밖에서 변수를 선언하면 그 변수는 전역변수가 된다.
전역변수(global scope)는 애플리케이션 어디에서든 접근이 가능한 변수이다.
var vscope = 'global';
function fscope(){
var vscope = 'local';
console.log('함수안 '+vscope);
}
fscope();
console.log('함수밖 '+vscope);
//결과:
함수안 local
함수밖 global
지역변수의 유효범위는 함수 내부이다.
var vscope = 'global';
function fscope(){
vscope = 'local';
console.log('함수안'+vscope);
}
fscope();
console.log('함수밖'+vscope);
//결과: 함수안 local 함수밖 local
둘 다 local을 출력했다. 함수내에서 vscope를 var로 새로 선언하지 않고 할당만 새로 했기 때문이다.
만약 전역변수와 같은 이름의 지역변수를 함수 내에서 쓰고싶다면 '반드시' 변수를 함수 내에서 새로 선언해야한다.
같은 이름의 전역변수와 지역변수가 있다면 지역변수가 우선순위이다.
function a (){
var i = 0;
}
for(var i = 0; i < 5; i++){
a();
console.log(i);
}
//결과 : 0 1 2 3 4
function a (){
i = 0;
}
for(i = 0; i < 5; i++){
a();
console.log(i);
}
//결과 : 무한루프
정적 유효범위 (렉시컬)
JS는 함수가 선언된 시점에서의 유효범위를 갖는다. 이런 유효범위의 방식을 정적 유효범위(static scoping) 혹은 렉시컬(lexical scoping)이라고 한다.
var i = 5;
function a(){
var i = 10;
b();
}
function b(){
console.log(i);
}
a();
//결과 : 5
b함수가 호출되는 시점에서의 i가 아닌, 정의될 때의 시점에서의 i를 출력하기 때문이다. 따라서 함수 b는 i값을 찾을 때 한단계 위의 scope인 global scope에서 i값을 찾게 된다.
참고)
https://ffoorreeuunn.tistory.com/148
'바닐라코딩 사전학습 > JS' 카테고리의 다른 글
Primitive / Reference (0) | 2021.12.27 |
---|---|
Hoisting (0) | 2021.12.27 |
appendChild()와 node참조 (0) | 2021.12.24 |
Callback함수 (0) | 2021.12.24 |
Function / Arrays / Object (0) | 2021.12.24 |