
일급객체는 조건이 필요하다.
모든 언어에는 문법이 있고 쓰는 방법이 있다.
자바스크립트에서 함수는 아래와 같은 방식으로 쓰인다.
//함수선언식
function funcName(){}
//함수표현식
const func = function(){}
funtion 함수이름(매개변수){로직} 형태함수이름(매개변수) 로 호출해주어야 실행이 된다.var 변수이름 = funtion 함수이름(매개변수){로직} 형태위의 두가지 경우 제외하고 다른 함수형식의 선언식과 표현식이 존재한다.
//익명 함수표현식(Anonymous Function Expression)
var func = function() {
/* 함수안의 내용 */
};
//기명 함수표현식(Named Function Expression)
var func = function func() {
/* 함수안의 내용 */
/* 특이점 : func안의 function func() 내부에서만 쓰일 수 있다.(재귀함수) */
}
//익명 즉시실행함수(Immediately-invoked Function Expression)
(function(){
/* 함수안의 내용 */
})
//익명 즉시실행함수(Immediately-invoked Function Expression)
//더글라스 클락포드가 권장하는 표기법
(function(){
/* 함수안의 내용 */
}())
//기명 즉시실행함수(Named Immediately-invoked Function Expression)
(function func(){
/* 함수안의 내용 */
})
function func(){
function inner(){
console.log('hello')
}
return inner()
function inner(){
console.log('bye')
}
}
함수선언식으로만 구성되어진 이 소스에서는 return inner() 이 반환되면 항사 bye만 찍히는 모습을 볼 수가 있다.
그리고 return inner() 을 어디로 놔두어도 똑같이 bye만 찍히며 함수선언식의 특징인 호이스팅의 모습을 보여주고 있다.
function func(){
var inner = function(){
console.log('hello')
}
return inner()
var inner = function (){
console.log('bye')
}
}
함수표현식으로 구성되어진 이 소스는 return inner() 이 반환되면 항사 hello만 찍히는 모습을 볼 수가 있다.
그리고 return inner() 을 var inner 위치에 따라서 다른 내용을 보여준다.
함수와 호이스팅에 대해서 공부하면서 자바스크립트의 Statements와 Expressions에 대한 내용들을 많이 보게되었다. 호이스팅만 생각 할 수 있지만 함수와 호이스팅 그리고 변수는 뗄래야 뗄 수 없는 부분같다.