function 정의부만 존재, 할당 명령이 없는 경우
function a() {
...
}
a(); // 실행 ok
var b = function () {};
b(); // 실행 ok
// d()는 c() 안에서 재귀적으로 호출될 때만 사용 가능하므로 사용성에 대한 의문
var c = function d() {
}; // 변수에 함수를 할당, 함수에 또 이름을 적는것. 자주 사용
c(); // 실행 ok
d(); // 에러!
선언문과 표현식의 예시!
console.log(sum(1, 2));
console.log(multiply(3, 4));
function sum(a, b) {
// 함수 선언문 sum
return a + b;
};
var multiply = function (a, b) {
// 함수 표현식 multiply
return a + b;
};
호이스팅 적용 시
function sum(a, b) {
// 함수 선언문 sum
return a + b;
}
var multiply;
console.log(sum(1, 2));
console.log(multiply(3, 4));
multiply = function (a, b) {
// 함수 표현식 multiply
return a + b;
};
선언문은 호이스팅이 되지만 표현식은 되지 않는다.
함수명();
=> 전역객체객체.함수명()
CASE1 : 함수
호출 주체를 명시할 수 없기 때문에 this는 전역 객체
var func = function (x) {
console.log(this, x);
};
func(1); // Object [global] { ... } 1
CASE2 : 메서드
호출 주체를 명시할 수 있기 때문에 this는 해당 객체(obj)를 의미
var obj = {
method: func,
};
obj.method(2); // { method: [Function: func] } 2
.
이나 []
.언듯보면 선언문이 좋아보이지만, 나중에한 선언문이 위에 코드에게 영향을 줄 수 있기 때문에 협업 같은 경우에는 표현식 위주로 사용!