var라는 변수의 치명적 특징은 값을 지정하지 않았을때에

빈그릇 안에 기본적으로 언디파인트라는 값이 들어가있다.
그래서 나중에 오류가 많이 뜬다. 코드자체도 엄청 길어진다

또한 변수(var)를 적지 않았는데도 10이 뜨는 결과.. 값이 없는건데 자바스크립트는 오류를
알려주지 않는다.
=> 그래서 이런 불편한 부분을 위해 등장한 게
let과 const이다..
자바스크립트에서 변수를 사용할때 조심해야하는 개념이 있다.
바로 '호이스팅 hoisting'이라고 하는데, 호이스팅이란 '끌어올리다.'
라는 뜻을 가지고 있다.
상황에 따라 변수에 선언과 할당을 분리해서 선언 부분을 스코프에 가장 위쪽으로
끌어올리는 것을 말한다.
끌어올린다고 해서 실제로 소스코드가 맨위로 올라간다는 것이 아니라, 그런식으로
자바스크립트 엔진이 해석한다는 의미이다.
변수를 선언하고 사용할때 변수가 적용되는 유효범위를 뜻한다.
변수가 유효하게 쓰일 수 있는 영역을 가르키는 것이다.
자바스크립트에서 함수에서 변수를 사용할 때 영역에 주의해야 한다.
한 함수 안에서만 사용하고 다른 함수에서 사용할 수 없는 변수가 있는가 하면,
어느 함수에서나 다 사용할 수 있는 변수가 있다.
한 함수에서만 사용할 수 있는 변수를 '지역변수()' 또는 '로컬변수'라고 하고
어느 함수에서나 다 사용할 수 있는 변수를 '전역변수' 또는 '글로벌변수'라고 한다.
전역변수는 적용 범위를 제한하지 않고 쓸 수 있다.
즉 전역변수는 지역변수와 달리 스크립트 소스 코드 전체에서 사용할 수 있다.
비유하자면 건전지가 기계 안에 있지 않고 집에 있다면 어느 기계든 건전지를 사용할 수
있는 듯이 밖에 나와있는 건전지와 비슷하다.
변수를 전역으로 사용할때에는 함수 밖에서 선언하거나, var 예약어를 생략하고
선언해야 한다.

result1은 함수 밖에 선언되어 200이 출력
function addNum밖에 선언이 되어있으므로 전형적인 전역변수의 모양

**var라는 키워드를 쓰는 순간 밖에 쓰게 되면 오류가 나지만
var라는 키워드가 생략된 순간 부터 전역변수로 변경이 됨
즉 전역으로 사용할 수 있다는 말. 스크립트 최상단에서 대기 중인 상태
그래서 result2는 다른 함수 안에서도 접근해서 사용가능함.
예) 에어팟을 여러 기계에 컴퓨터, 핸드폰, 아이패드 연결해놨는데 동시에 연결하려고 하는 상태인것이다. 벗 동시에 연결하려고 하면 오류나듯이
우리도 조심히 사용해야하는 것이다.
**
함수 안에서 선언하고 함수 안에서만 사용한다.
지역변수를 선언하려면 예약어 var와 함께 변수 이름을 함수 안에서 지정해야한다.
지역변수는 비유하자면 건전지와 비슷하다.
건전지는 기계 안에 들어있으면 기계 안에서만 사용할 수 있듯이
지역변수로 만들어놓으면 함수 안에서만 사용할 수 있다.
아래의 예제를 보면 console.log(sum)을 실행했을때 some is not defind라는
메세지가 뜨게 되는데 sum이라는 변수(건전지)는 addNum함수(기계) 안에서
선언되었기 때문에
유효범위를 벗어나서 에러메세지가 뜨는 것이다.

실제창에는 sum이 있지만
sum은 addNum이라는 기계 안에 있기 때문에 따로 sum만 불러왔을때는
콘솔창에는 선언된 적이 없다고 뜬다. = sum은 전역에서 선언된 적이 없으므로 오류가 나타난다.= 전역변수

안으로 옮겨주었다. addNum안에!!!!!
이렇게 지역변수이기 때문에 addnum안에서만 쓸 수 있다. = 지역변수