코드부터 살펴보자
let x = 120;
var z = 30
function createFunction1() {
function y() {
if (x % 2 && x != 0) {
return x * z;
}
else {
return Math.random();
}
}
return y;
}
function createFunction2() {
x = 30;
function f() {
return x;
}
return f;
}
let f1 = createFunction1();
console.log(f1()); // 무작위 수
let f2 = createFunction2();
console.log(f2()); // 30
let f1 = createFunction1(); 로 f1에 createFunction1()에 있는 값을 할당시켰다.
console.log(f1()); f1을 호출한다. f1에는 createFunction1()에 있는 값을 할당시켰기 때문에
위의 function createFunction1()로 올라가게 된다. function y()를 만나 if을 수행하게 되고
x에는 120이 들어있기 때문에 x % 2는 0, x != 0은 true이다.
&&연산자는 둘 다 참일 때 참이기 때문에 x % 2 는 0이므로 0은 false를 의미하므로 else로 내려가게 된다.
그러므로 console.log(f1())은 무작위 수가 출력되고, 같은 원리로 동작하여 console.log(f2())는 30이 출력된다.