
함수를 사용하면 코드를 저장하고 재사용성이 높다.
함수는 프로그래밍 코드를 저장하는 공간이고 자바스립트 해석기가 함수를 만나면 기억만 해두고 호출하게 되면 해당 함수를 실행한다.
[기본형]
1. 일반 함수 정의문
----------------------------------------
function 함수명(){실행시킨 자바스크립트 코드;}
함수명(); -> 함수를 호출하는 호출문. 해당 줄에서 함수를 실행한다.
2. 함수 표현식(익명 함수)
------------------------------------------
var 참조변수 = function(){실행시킨 자바스크립트 코드;}
변수명(); -> 익명함수를 호출하는 호출문. 해당 줄에서 함수를 실행한다.
📌변수
📌함수
호이스팅이란 해당 함수를 자바스크립트의 최상단 위치로 끌어올려 기억하는 것을 말한다. 호이스팅을 적용하면 함수 정의문보다 호출문이 먼저 나와도 함수 정의문을 끌어올려 함수를 호출한다.
하지만 익명함수는 호이스팅이 지원되지 않기 때문에 반드시 함수가 먼저 등장한 이후에 호출해야한다.
![]() | ![]() |
|---|
자바스크립트 ES6버전에서는 변수를 선언하기 위해 let, const라는 새로운 예약어가 생겼다. var와 let, const는 호이스팅기술과 스코프에 큰 차이가 있다.
자바스크립트에서 변수를 선언하고 사용할 때 변수가 적용되는 유효범위를 '스코프(scope)'라고 한다. 즉, 변수가 어디까지 유효한지 가리키는 범위를 말한다(변수를 사용할수 있는 영역)
한 함수안에서만 사용할 수 있는 변수를 '지역변수' 또는 '로컬변수' 라고 부르고 ,
어느 함수에서나 다 사용할 수 있는 변수를 '전역변수'또는 '글로벌 변수'라고 부른다.
지역변수는 {}안에서만 유효한다. 이런 스코프(유효범위)를 '블록레벨의 스코프'({}호를 포함하고 있는 전체 영역)라고 하고, 전역변수(스크립트 전체에 쓸수있는)는 '함수레벨의 스코프'를 가진다라고 표현한다.

호이스팅은 상황에 따라 변수의 선언과 할당을 분리해서 선언 부분을 스코프의 가장 위쪽으로 끌어 올리는 것을 말한다.그러나 실제로 소스코드를 끌어올리는 것은 아니고 소스를 그런 방식으로 해석한다는 의미이다.
재선언이란 var키워드를 앞에 붙여서 여러 번 동일한 이름을 쓰는 것을 재선언이라고 한다.
ex) var i = 0; 이후에 var i; 이런식으로 동일한 이름을 var를 붙여 여러번 선언하는 것을 말한다. 재선언을 하면 이전에 만들었던 변수는 사라진다.(변수(그릇)자체가 사라짐)
재할당이란 변수에 값을 다시 새로 넣는 것을 말한다.
ex) var i = 0; 이후에 i = 10;처럼 값을 새로 할당하는 것을 말한다.
재할당을 하면 이전에 있던 값을 사라진다.(값만 사라짐)

ES6 버전부터는 let과 const가 추가되었고, 되도록이면 var예약어는 사용하지 않기를 권장하고 있다.(예상치 못한 프로그래밍 오류가 많아서)
var는 함수영역(레벨)의 스코프를 가지지만 let과 const는 블록영역의 스코프를 가진다.
let예약어로 선언한 변수는 변수를 선언한 블록({}로 묶은 부분)에서만 유효하고 블록을 벗어나면 사용 할 수 없다.
let 예약어를 사용한 변수는 재할당은 가능하지만 재선언은 불가하다.
[기본형]
let 변수명; 또는 let 변수명 = 값;
