[TCP School/자바스크립트] 함수 - 함수의 유효 범위
2023. 4. 18. 15:14
대부분의 프로그래밍 언어에서는 블록 내에서 정의된 변수를 블록 외부에서 접근할 수 없다.
이러한 블록을 기준으로 하는 유효 범위를 블록 단위의 유효 범위라고 한다.
하지만 자바스크립트는 다른 언어와 달리 함수를 블록 대신 사용한다.
자바스크립트에서 함수는 자신이 정의된 범위 안에서 정의된 모든 변수 및 함수에 접근할 수 있다.
전역 함수는 모든 전역 변수와 전역 함수에 접근할 수 있다.
반면, 다른 함수 내에 정의된 내부 함수는 그 함수의 부모 함수에서 정의된 모든 변수 및 부모 함수가 접근할 수 있는 모든 다른 변수까지도 접근할 수 있다.
var x = 10, y = 20;
// sub()는 전역 함수
function sub() {
return x - y; // 전역 변수인 x, y에 접근
}
document.write(sub() + '<br>'); // -10
// parentFunc()는 전역 함수
function parentFunc() {
var x = 1, y = 2; // 전역 변수와 같은 이름으로 선언하여 전역 변수의 범위를 제한
// add()는 내부 함수
function add() {
return x + y; // 전역 변수 x, y가 아닌 지역 변수 x, y에 접근
}
return add()
}
document.write(parentFunc()); // 3
함수 호이스팅(hoisting)
자바스크립트에서 함수의 유효 범위라는 것은 함수 안에서 선언된 모든 변수는 함수 전체에 걸쳐 유효하다는 의미이다.
그런데 이 유효 범위의 적용이 변수가 선언되기 전에도 똑같이 적용된다.
이러한 자바스크립트의 특징을 함수 호이스팅이라고 한다.
즉, 자바스크립트 함수 안에 있는 모든 변수의 선언은 함수의 맨 처음으로 이동된 것처럼 동작한다.
var globalNum = 10;
function printNum() {
document.write('지역 변수 globalNum 선언 전의 globalNum의 값은 ' + globalNum + '입니다.<br>'); // undefined
var globalNum = 20;
document.write('지역 변수 globalNum 선언 후의 globalNum의 값은 ' + globalNum + '입니다.'); // 20
}
printNum()
위의 예제는 아래와 같은 코드로 변경되어 처리된다.
var globalNum = 10;
function printNum() {
var globalNum;
document.write('지역 변수 globalNum 선언 전의 globalNum의 값은 ' + globalNum + '입니다.<br>'); // undefined
globalNum = 20;
document.write('지역 변수 globalNum 선언 후의 globalNum의 값은 ' + globalNum + '입니다.'); // 20
}
printNum()
TCP School의 강의 내용을 정리한 포스트입니다.
http://www.tcpschool.com/javascript/intro
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'공부 > JavaScript' 카테고리의 다른 글
[TCP School/자바스크립트] 객체 - 객체의 개념 (0) | 2023.04.19 |
---|---|
[TCP School/자바스크립트] 함수 - 매개변수와 인수 (0) | 2023.04.19 |
[TCP School/자바스크립트] 함수 - 변수의 유효 범위 (0) | 2023.04.18 |
[TCP School/자바스크립트] 함수 - 함수의 기초 (0) | 2023.04.18 |
[TCP School/자바스크립트] 배열 (0) | 2023.04.18 |