SetTimeout๊ณผ ๋น๋๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ญ ๊ฐ์ฒด์ธ window์ SetTimeout์ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ธ ์คํ ์์๋ฅผ ํ์ธํ ์ ์๋ค.
setTimeout
window.setTimeout();
setTimeout();
window๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ญ ๊ฐ์ฒด์ด๋ฏ๋ก, ์๋ต์ด ๊ฐ๋ฅํ๋ค.
setTimeout์ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ ํจ์,
๋ ๋ฒ์งธ๋ setTimeout์ด ํธ์ถ๋๊ณ ๋ ์ดํ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ํจ์๊ฐ ์คํ๋ ์๊ฐ(๋ฐ๋ฆฌ ์ธ์ปจ๋)๋ฅผ ๋ฐ๋๋ค.
๋น๋๊ธฐ์ ์คํ
function innerFunc() {
console.log("innerFunc ์คํ");
}
console.log("ํ๋ก๊ทธ๋จ ์คํ");
setTimeout(innerFunc, 2000);
console.log("ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
๊ฐ๋จํ ํจ์๋ฅผ ๋ง๋ค๊ณ , setTimeout ์์ ํจ์์ ์๊ฐ์ 2์ด๋ก ์ค์ ํ๋ค.
๋๊ธฐ์ ์ธ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํ๋ค๋ฉด, "ํ๋ก๊ทธ๋จ ์คํ" ๋ค 2์ด ๋ค์ "innerFunc ์คํ", ๊ทธ๋ฆฌ๊ณ "ํ๋ก๊ทธ๋จ ์ข
๋ฃ"๊ฐ ๋์ฌ ๊ฒ ๊ฐ๋ค.
์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์.
ํ๋ก๊ทธ๋จ ์คํ
ํ๋ก๊ทธ๋จ ์ข ๋ฃ
innerFunc ์คํ
์์ฐจ์ ์ผ๋ก ์งํ๋ ๊ฒ ๊ฐ์ ์์ค์๋ ๋ฌ๋ฆฌ, setTimeout์ ๋น๋๊ธฐ์ ์ธ ์์๋ก ์คํ์ ์ง์ํ๊ธฐ ๋๋ฌธ์,
ํ๋ก๊ทธ๋จ ์คํ, ์ข
๋ฃ๊ฐ ๋จผ์ ์ฝ์์ ๋ํ๋๊ณ , 2์ด ๋ค innerFunc๊ฐ ์คํ๋์๋ค.
์คํ๊ณผ ์ด๋ฒคํธ ํ
function innerFunc() {
console.log("innerFunc ์คํ");
}
console.log("ํ๋ก๊ทธ๋จ ์คํ");
setTimeout(innerFunc, 0);
console.log("ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
๋ง์ฝ ์์ฒ๋ผ ์๊ฐ์ 0์ผ๋ก ๋ฐ๊ฟ๋ innerFunc๊ฐ 2์ด์์ ๋๊ธฐ ์๊ฐ์ด ์ค์ด๋ค ๋ฟ, ์คํ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
๋น๋๊ธฐ ํจ์์ ๊ฒฝ์ฐ์, ์คํ์์ ๋ฐ๋ก ์คํ๋๋ ๊ฒ์ด ์๋๋ผ ์ด๋ฒคํธ ํ
์ ๋ฏธ๋ฆฌ ์ ์ฅ์ ํด๋๋ค.
์คํ์ ์์ฌ์๋ ์ฝ๋๋ค์ด ๋ชจ๋ ์คํ๋ ํ, ์ด๋ฒคํธ ํ์ ์๋ ๊ฒ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, 0์ด ๋ค ์คํ์ ํด๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ด๋ค.
function innerFunc() {
console.log("innerFunc ์คํ");
}
function asyncTest() {
console.log("asyncTest ์คํ");
setTimeout(innerFunc, 2000);
// ์ด๋ฒคํธ ํ์ ์ ์ฅ
console.log("asyncTest ์ข
๋ฃ");
}
console.log("ํ๋ก๊ทธ๋จ ์คํ");
asyncTest();
console.log("ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
์์ ์ฝ๋๋ ์คํํด๋ณด๋ฉด, setTimeout(innerFunc, 2000);
์ธ ์ ๋ชจ๋ ์คํ์์ ๋ฐ๋ก ์คํ๋๋ฏ๋ก,
ํ๋ก๊ทธ๋จ ์คํ
asyncTest ์คํ
asyncTest ์ข ๋ฃ
ํ๋ก๊ทธ๋จ ์ข ๋ฃ
innerFunc ์คํ
์ด๋ฌํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
var, let, const (0) | 2022.03.12 |
---|---|
ES6 ํจ์ ๊ธฐ๋ฅ (0) | 2022.03.11 |
ajax๋ก Post ์์ฒญํ๊ธฐ (0) | 2022.03.10 |
์๋ฐ์คํฌ๋ฆฝํธ ์๋ฃ๊ตฌ์กฐ (0) | 2022.03.08 |
ํธ์ด์คํ (Hoisting) (0) | 2022.03.07 |