이제 이제 함수의 기본들을 익혔으니, 약간 까다로운 지역변수 (local variable)와 전역변수(glbal variable)에 대해서 말하겠습니다
이 용어들은 지금 여러분들에게 아무 의미도 없을지 모릅니다 우선 예를 가지고 시작해 봅시다
저는 이 프로그램을 제가 어릴 때 몇 인치씩 컸는지 보여주기 위해서 만들었습니다
사람들은 다른 속도로 크기 때문에 calcInches이란 함수를 만들었습니다
이 함수에는 startAge(시작 나이), endAge(끝나는 나이) 그리고 inchesPerYear(매년 자란 인치)룰 전달합니다
그러면 그 함수는 그 기간동안 몇 인치가 자랐는지 계산해서
그 함수를 호출한 곳으로 그 값을 돌려 줍니다
보다시피 0살부터 8살까지에 대해 calcInches를 호출하고 0, 8 그리고 2.5를 보냅니다
저는 매년 약 2.5인치씩 자랐기 때문입니다.
이를 계산 하면, 이는 20이란 결과를 보여줍니다.
그다음 8살 부터 16까지는, 8, 16 그리고 2를 전달합니다
왜냐하면 전과 비교하여 덜 자랐기 때문이고 16이란 결과를 보여주는 것을 볼 수 있습니다
깔끔하죠? 하지만 이제 청소년기를 통틀어 얼마나 자랐는지를 보이고 싶습니다
이건 어떻게 할까요? 음... 내 프로그램 코드를 보면서 생각을 해봅시다
"흠… 무슨 값들을 내가 가지고 있죠?" 총 인치 값처럼 보이는 것이 있나요?
음... totalInches란 변수가 calcInches 함수안에 있기 때문에
결과를 내서 뭐라고 하는지를 보는 것부터 시작을 합시다
즉 이 부분 text(totalInches, 10, 200)을 아래로 옮깁시다
그러면.. 어디까지 했죠? 어 어떡하죠? 'Oh noes!' 이모티콘이 튀어나왔습니다 문제가 있다고 합니다
totalInches가 정의되지 않았답니다. 흠, 이상하네요, 왜냐하면 여기에 totalInches에 관한 정의를 썼는데 말입니다. (var total inches =)
흠, 문제는 함수 안에서 totalInches를 선언했기 때문입니다 이 줄에서 말입니다
그리고 함수 안에 변수를 선언하면 이는 지역변수(local variable)로 취급합니다
이는 이 함수(calcInches)안에만 존재합니다.
그리고 함수 밖에 있는 모든 코드들은 함수 안에 있는 지역변수(local variable)를 보지 못합니다
이것은 단지 반환되는 것만 봅니다
이는 변수는 보지 않고 값만 봅니다
그러므로 totalInches를 함수 밖에서 사용하고 싶다면 컴퓨터는 이것이 무엇인지 모르고
'난 이 변수를 본 적이 없어. 정의가 되어있지 않아 보여줄 수 없어'라고 합니다
코드 밖에서 위치한 코드가 이 변수를 볼 수 있게 하는 방법이 있습니다
그리고 이는 지역변수(local variable)에서 전역변수(global variable)로 전환할 때입니다
정의를 함수 밖, 전역 범위라 불리는 곳으로 이동하면 됩니다
그리고 이제는 변수를 정의하거나 선언하지 않고 함수 안에서 값을 매번 바꾸기만 하면 됩니다
그러므로 'Total grown over life: 16'이란 것을 볼 수 있습니다
전역변수(global variable)로 바꿨기 때문에 컴퓨터는 변수를 찾을 수 있었습니다
그러나 이 값은 우리가 정말 찾고 있는 값은 아닙니다
이 값은 단순히 가장 최근 값입니다
왜냐하면 이 함수를 부를 때마다 totalInches를 그 당시에 계산하는 값으로 인식하기 때문입니다
그러므로 우리가 정말 하고 싶은 것은 전체 총합을 저장할 수 있는 새로운 변수를 원합니다
매번 계산한 값을 계속 합해 나간 전체 범위에서의 총합 말입니다
그러므로 이를 지역변수(local variable)로 다시 바꾸고 lifeInches란 새로운 전역변수(globa variable)를 만듭시다
그리고 그것을 0에 놓고 시작합시다
함수 안에서는, lifeInches +=totalInches라고 하여 이 전역변수에 더해 나갑니다
이 함수를 부를 때마다 계산해서 나온 값을 계속 더할것 입니다
그리고 이 아래쪽에 lifeInches를 놓읍시다
(lifeInches, 10, 200)
짜잔! 인생에서 총 성장한 값이 나옵니다.
이 것은 제 진짜 키가 아닙니다 그것보단 큽니다
그러나 알다시피 태어날 때 키는 0보다는 더 큰 값에서 시작합니다
총합을 구하기 위해선 아마도 20에서 시작해보도록 합시다
여기있네요, 이게 제 키입니다
좋습니다. 이제 복습을 해봅시다 totalInches는 흔히 지역변수(local variable)라 불리는 것입니다
이 함수 밖이 아닌 안에 선언한 것을 알기에
이는 여기 밖에 있는 이 코드는 totalInches란 변수를 모른다는 것을 의미합니다
그리고 이제 lifeInches는 전역 변수라고 불리는 것입니다
왜냐하면 이의 선언을 전역 범위 즉 함수 밖에서 선언되기 때문입니다
함수와 변수를 작성할 때에는 이것을 꼭 기억하시길 바랍니다
그리고 함수 안에서 사용하기 위해 지역변수를 원하는지
아니면 프로그램 전체에서 쓰기 위해 지역변수(local variable)를 필요로 하는지 생각하시길 바랍니다
그리고 이해하기 어렵다고 걱정하지 마시길 바랍니다
이 개념은 특히 JavaScript 프로그래밍에서 가장 어려운 개념 중 하나입니다
그리고 이 것은 꾸준히 연습할수록 느는 것 입니다