본문 바로가기
Language/JavaScript

[JavaScript] 함수 - 변수/함수의 유효 범위

by jsh5408 2021. 10. 28.

변수의 유효 범위(variable scope)

- 해당 변수가 접근할 수 있는 변수, 객체, 함수의 집합

- 객체 / 함수 는 모두 변수

 

1. 지역 변수(local variable)

2. 전역 변수(global variable)

 

1. 지역 변수(local variable)

- 함수 내에서 선언된 변수 / 매개변수

- 변수가 선언된 함수 내에서만 유효 => 함수 종료 시, 메모리에서 사라짐

function localNum() {
	const num = 10;
	console.log(typeof num);	// number
}

localNum();
console.log(typeof num);	// undefined

* 선언되지 않은 변수를 사용 => 오류 / typeof 연산자는 오류 대신 undefined

 

 

2. 전역 변수(global variable)

- 함수 외부에서 선언된 변수

- 프로그램의 어느 영역에서 접근 가능 => 웹 페이지가 닫혀야 메모리에서 사라짐

let num = 10;
function globalNum() {
	console.log(num);	// 10
	num = 20;
}

globalNum();
console.log(num);	// 20

- 전역 변수와 같은 이름의 지역 변수를 선언해서 사용 가능

let num = 10;
function globalNum() {
	let num = 20;
	console.log(num);	// 20
}

globalNum();
console.log(num);	// 10

이 때, 전역 변수 값을 사용하려면 window 객체의 프로퍼티임을 명시하면 됨

let num = 10;
function globalNum() {
	let num = 20;
	console.log(num);		// 20
	console.log(window.num);	// 10
}

globalNum();
console.log(num);	// 10

 


 

함수의 유효 범위(function scope)

- 함수는 자신이 정의된 범위 안에서 정의된 모든 변수 및 함수에 접근 가능

- 전역 함수 => 모든 전역 변수와 전역 함수에 접근 가능

- 내부 함수 => 부모 함수에서 정의된 모든 변수 및 부호 함수가 접근할 수 있는 다른 변수까지 접근 가능

let x = 10, y = 20;

function sub() {
	return x - y;
}

console.log(sub());	// -10

---

function parentFunc() {
	let x = 1, y = 2;
	function add() {
		return x + y;
	}
	return add();
}

console.log(parentFunc());	// 3

 

 

함수 호이스팅(hoisting)

- 유효 범위의 적용이 변수 선언 전에도 똑같이 적용되는 특징

- 함수 안에 있는 모든 변수의 선언은 함수의 맨 처음으로 이동된 것처럼 동작

const globalNum = 10;
function printNum() {
	console.log(globalNum);	// undefined => 호이스팅 발생
	const globalNum = 20;
	console.log(globalNum);	// 20
}
printNum();

- 함수 호이스팅이 자동이지만 항상 변수를 미리 선언하는 것이 좋음

 

 

 

 

 

http://tcpschool.com/javascript/js_function_variableScope

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'Language > JavaScript' 카테고리의 다른 글

[JavaScript] 함수 - 미리 정의된 전역 함수  (0) 2021.10.28
[JavaScript] 함수 - 매개변수와 인수  (0) 2021.10.28
[JavaScript] 함수의 기초  (0) 2021.10.24
[JavaScript] 배열  (0) 2021.10.24
[JavaScript] 기타 제어문  (0) 2021.10.21

댓글