μ°Έκ³ λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
π‘ ν¨μν νλ‘κ·Έλλ°
: μμ ν¨μμ 보쑰 ν¨μμ μ‘°ν©μ ν΅ν΄ μΈλΆ μνλ₯Ό λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό μ΅μνν΄μ λΆλ³μ±μ μ§ν₯νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€.
πΎ#01
function bar() {
console.log("hello");
}
bar(); // hello
πΎ#02
var bar = function bar() {
console.log("hello");
};
bar(); // hello
ππ» μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μΈλ¬Έμ ν΄μν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€. μμ±λ ν¨μλ₯Ό νΈμΆνκΈ° μν΄ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ , κ±°κΈ°μ ν¨μ κ°μ²΄λ₯Ό ν λΉνλ€.
ν¨μ μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ μλ°μ€ν¬λ¦½νΈ κ³ μ μ νΉμ§μ λ§ν¨.
foo(); // TypeError: sub is not a function
bar(); // hello
var foo = function foo() {
console.log("foo");
};
function bar() {
console.log("bar");
}
ππ» ν¨μ ννμμΈ fooλ λ³μ μ μΈμ΄ λ°νμ μ΄μ μ μ€νλμ΄ undefinedλ‘ μ΄κΈ°ν λλ©°, λ°νμ μμ μ ν λΉλ¬Έμ΄ μ€νλμ΄ ν¨μκ°μ²΄κ° λλ€. λ°λΌμ μ μμ μμλ λ³μ νΈμ΄μ€ν
μ΄ μ€νλλ€.
ππ» ν¨μ ννμ μ΄μ μ ν¨μλ₯Ό μ°Έμ‘°νλ©΄ undefinedλ‘ νκ°λκ³ λ°λΌμ μ΄λ ν¨μλ₯Ό νΈμΆνλ©΄ νμ
μλ¬λ₯Ό λ°μμν¨λ€.
π‘ λ°λΌμ ν¨μ μ μΈλ¬Έ λμ ν¨μ ννμ μ¬μ©μ κΆμ₯νλ€.
return + ννμ
μΌλ‘ μ΄λ€μ§.
- λ¨ νλ²λ§ νΈμΆλλ©° λ€μ νΈμΆν μ μλ€.
- μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€.
- λ°λμ κ·Έλ£Ή μ°μ°μ(..)λ‘ κ°μΈμΌ νλ€.
/* 01 */
(function () {
//..
})();
/* 02 */
(function () {
//..
})();
- setTimeout(ν¨μ, μκ°): μΌμ μκ° ν ν¨μ μ€ν
- setInterval(ν¨μ, μκ°): μκ° κ°κ²©λ§λ€ ν¨μ μ€ν
- clearTimeout(): μ€μ λ Timeout ν¨μλ₯Ό μ’ λ£
- clearInterval(): μ€μ λ Interval ν¨μλ₯Ό μ’ λ£
π΅ setTimeout(ν¨μ, μκ°)
// 3μ΄ λ€ μ€ν
setTimeout(function () {
console.log('zooyaho!')
},3000)
setTimeout(() => {
console.log('zooyaho!')
},3000)
π΅ clearTimeout()
// 3μ΄ μ h1μμ ν΄λ¦ μ timerν¨μ μ’
λ£λμ΄ consoleμ΄ μ°νμ§ μμ
const timer = setTimeout(function () {
console.log('zooyaho!')
},3000)
const h1El = document.querySelector('h1')
h1El.addEventListener('click', ()=> {
clearTimeout(timer)
})
π΅ setInterval(ν¨μ, μκ°)
// 3μ΄ λ§λ€ μ€ν
setInterval(() => {
console.log('zooyaho!')
},3000)
π΅ clearInteval()
// h1μμ ν΄λ¦ μ timerν¨μ μ’
λ£
const timer = setTimeout(function () {
console.log('zooyaho!')
},3000)
const h1El = document.querySelector('h1')
h1El.addEventListener('click', ()=> {
clearInteval(timer)
})
ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μ
π κ³ μ°¨ ν¨μ : 맀κ°λ³μλ₯Ό ν΅ν΄ ν¨μμ μΈλΆμμ μ½λ°±ν¨μλ₯Ό μ λ¬λ°μ ν¨μ
πΎ#01
function repeat(n, f) {
for (let i = 0; i < n; i++) {
f(i);
}
}
/* 01 */
repeat(5, function (i) {
if (i % 2) console.log(i);
}); // 1 3
ππ» μ΅λͺ
ν¨μ 리ν°λ΄μ μ½λ°± ν¨μλ‘ κ³ μ°¨ ν¨μμ μ λ¬
ππ» μ΅λͺ
ν¨μ 리ν°λ΄μ repeat ν¨μλ₯Ό νΈμΆν λλ§λ€ νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ±
πΎ#02
/* 02 */
var logOdd = function (i) {
if (i % 2) console.log(i);
};
repeat(5, logOdd); // 1, 3
ππ» logOdd ν¨μλ λ¨ ν λ²λ§ μμ±
ππ» κ³ μ°¨ ν¨μμ ν¨μ μ°Έμ‘°λ₯Ό μ λ¬!!
ππ» μ½λ°± ν¨μλ₯Ό μ΅λͺ
ν¨μ 리ν°λ΄λ‘ μ μνλ©΄μ 곧λ°λ‘ κ³ μ°¨ ν¨μμ μ λ¬νλ©΄ κ³ μ°¨ ν¨μκ° νΈμΆλ λλ§λ€ μ½λ°± ν¨μκ° μμ±λλ€.
πΎ#03
// 3μ΄ ν zooyaho Done! μΆλ ₯
function timeout(cb) {
setTimeout(()=> {
console.log("zooyaho");
cb();
},3000)
}
timeout(()=> {
console.log("Done!");
});
ππ» ν¨μμ λͺ¨λ μ²λ¦¬ μ΄ν λ΄κ° μνλ λ΄μ©μ μΆκ°μ μΌλ‘ μ€νν μ μμ.
ππ» μ½λ°±μ μ€ν μμΉλ₯Ό 보μ₯νλ μ©λλ‘ μ¬μ©ν¨.
πΎ#01
let count = 0;
function increase(n) {
return ++n;
}
increase(count);
console.log(count); // 0
increase(count);
console.log(count); // 0
count = increase(count);
console.log(count); // 1
πΎ#02
let count = 0;
function increase() {
return ++count;
}
increase();
console.log(count); // 1
increase();
console.log(count); // 2