[Chapter 4] Node.js 함수의 유효범위(Scope) 와 익명함수

2017. 8. 22. 02:13Information Technology/Node.js

022 함수의 유효범위(Scope) 와 익명함수

*학습 내용: 함수 내외의 존재하는 변수의 유효범위와 

*힌트 내용: 함수내의 선언된 지역변수와 함수 밖에서 선언된 전역변수에대해 알아보고 함수를 변수에 대입하는 것에 대해서 배워보도록 하겠습니다.

 

변수를 지정하는 것은 아주 중요합니다. 특정 함수내에서 지정되었는지 아님 함수밖에서 지정되었는지에 따라서 변수의 사용유무가 달라집니다. 변수가 선언되었다는 건 메모리에 공간을 차지하게 됩니다. 따라서 어떻게 변수를 지정할 지 이해하는 것이 가장 중요합니다.

 

함수 내에서 선언된 변수를 지역변수 라고 합니다. 함수 내부에서는 사용될 수 없고 함수 내에서만 사용이 되므로 불필요한 메모리를 사용하지 않습니다.

 

함수 외부에서 선언된 변수를 전역변수 입니다. 프로그램 영역 전체에서 사용 될 수 있습니다.

     주의사항 : 함수내에서 변수유형(, var 또는 let)을 지정하지 않고 변수를 선언할 경우 지역변수가 아니라 전역변수가 됩니다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// JavaScript Code// 함수의 유효범위(Scope)  익명함수

 

// 전역 변수

let result_subtraction;

function subtraction(a, b){

  result_subtraction = a - b;

}

 

subtraction(100, 50);

console.log(result_subtraction);

 

 

// 변수에 익명 함수 형태로 함수를 정의할  있음

function multiple(a, b){

  let result = a * b;

  return result;

}

 

var r = multiple(10, 10);

console.log(r);

 

 

// 지역 변수

function sum(a, b){

  let result_sum = a + b;

}

 

sum(20, 30);

console.log(result_sum);

 

 

결과

50
100
C:\Users\JihyunJeong\Documents\nodejs_example_200\021to080_level2\022_function2.js:29
console.log(result_sum);
            ^
 
ReferenceError: result_sum is not defined
    at Object.<anonymous> (C:\Users\JihyunJeong\Documents\nodejs_example_200\021to080_level2\022_function2.js:29:13)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:390:7)
    at startup (bootstrap_node.js:150:9)
    at bootstrap_node.js:505:3

 

 

25번째 줄 result_sum이 지역변수로 선언되었기 때문에 sum()함수 내에서만 유효하다

따라서 29번째줄 console.log(result_sum); 에서 reulst_sum이라는 변수를 찾을 수 없기때문에 에러가 정의 되었지 않았다고 에러가 발생된다.

 

익명함수

19번째 줄 에서 보듯이 함수를 변수로 대입이 가능하다. , 익명함수 형태로 대입이 가능하다.  

var r = multiple(10, 10);

 

프로그램 퍼포먼스 측면에서 변수의 선언은 매우 중요합니다. 불필요한 메모리를 차지 않도록 사용에 주의해야 합니다. 그리고 보통 프로그램 전체에서 사용 되는 변수는 프로그램 상단에 주로 선언합니다







Motivation is what gets you started. Habit is what keeps you going.
 - Jim Ryun