[Koans]koans 후기
Scope
hoisting
let funcExpressed = "to be a function";
console.log(typeof funcDeclared); // 'function' // 함수선언문은 hoisting이 일어나기 때문에
console.log(typeof funcExpressed); // 'string' 위에 있는 'to be a function' 때문에..
console.log(funcTest); // ReferenceError: funcTest is not defined
function funcDeclared() {
return "this is a function declaration";
}
funcExpressed = function () {
return "this is a function expression";
};
funcTest = function () {
return "this is a test";
};
default parameter
function defaultParameter(num = 5) {
return num;
}
console.log(defaultParameter()) // 5
console.log(defaultParameter(10) // 10
closure
function increaseBy(increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
}
const increaseBy3 = increaseBy(3);
const increaseBy5 = increaseBy(5);
console.log(increaseBy3(10)); // 13;
console.log(increaseBy5(10)); // 15;
console.log(increaseBy(8)(6) + increaseBy(5)(9)); // 28;
let age = 27;
let name = "DK";
let height = 179;
function outerFn() {
let age = 24;
name = "RM";
let height = 178;
function innerFn() {
age = 26;
let name = "SG";
return height;
}
innerFn();
console.log(age); // 26
console.log(name); // 'RM'
return innerFn;
}
const innerFn = outerFn(); // innerFn에 outerFn()을 할당함으로 innerFn()을 outerFn함수 밖에서도 사용할 수 있게 되었다.
console.log(age); // 27
console.log(name); // 'RM'
console.log(innerFn()); // 178 // innerFn() === outerFn()()
함수 호출이 어디서 이뤄지는지 파악하는 것 중요
closure가 아닌경우
const increase = function () {
let num = 0;
return ++num;
};
console.log(increase1()); // 1
console.log(increase1()); // 1
console.log(increase1()); // 1
closure인 경우
const increase = function () {
let num = 0;
return function () {
return ++num;
};
};
const increase1 = increase();
console.log(increase1()); // 1
console.log(increase1()); // 2
console.log(increase1()); // 3
댓글남기기