(1) 함수선언식(Function Declarations)과 함수표현식(Function Expressions)
function 함수명() {}
function funcDeclarations() {
return 'declaration';
}
funcDeclarations(); //'declaration'
const 함수명 = function () {};
const funcExpression = function () {
return 'expression';
}
funcExpression(); // 'expression'
(2) 호이스팅
[koans 문제]
let funcExpressed = 'to be a function';
console.log(typeof funcDeclared)//'function';
console.log(typeof funcExpressed)'string';
function funcDeclared() {
return 'this is a function declaration';
}
funcExpressed = function () {
return 'this is a function expression';
};
fucntion
)으로 리턴합니다. 하지만 funcExpressed 표현식은 호이스팅을 안하기 때문에 위에 선언된 변수의 값의 타입(string
)을 리턴합니다. funcContainer.func()
변수.key() 값으로 실행이 가능하다. function funcDeclared() {
return 'this is a function declaration';
}
funcExpressed = function () {
return 'this is a function expression';
};
const funcContainer = { func: funcExpressed };
console.log(funcContainer.func())//'this is a function expression';
funcContainer.func() === funcExpressed();
funcContainer.func === funcExpressed; 이것하고 같다.
funcContainer.func = funcDeclared; 다시 재할당
console.log(funcContainer.func())//'this is a function declaration';
});
let age = 27;
let name = 'jin'; //'jimin'
let height = 179;
function outerFn() {
let age = 24; //26
name = 'jimin';
let height = 178;
function innerFn() {
age = 26;
let name = 'suga';
return height;
}
innerFn();
return innerFn;
}
const innerFn = outerFn();// 이것을 선언만 했어도 실행이 된다.
// outerFn() 이래도 실행이 된다.
const innerFn = outerFn // 이러면 실행이 되지 않는다.
출처 : 코드스테이츠