Javascript์์ ์ฌ์ฉ์ ์ ์ ํจ์(function)๋ฅผ ์ฌ์ฉํ ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
ํจ์ ์ ์ธ์
function ํจ์๋ช
(๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2 ..){
ํจ์๊ฐ ํธ์ถ๋์์ ๋ ์คํํ ๋ฌธ์ฅ;
..
return ๊ฐ;
}
//ํธ์ถํ ๋
ํจ์๋ช
(๊ฐ1, ๊ฐ2 ..);
ํจ์ ํํ์
let ๋ณ์๋ช
= function(๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2 ..){
ํจ์๊ฐ ํธ์ถ๋์์ ๋ ์คํํ ๋ฌธ์ฅ;
..
return ๊ฐ;
}
//ํธ์ถํ ๋
๋ณ์๋ช
(๊ฐ1, ๊ฐ2 ..);
์ด ๋๊ฐ์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น์? 1๋ฒ์ '์ ์ธ'๋์๊ธฐ ๋๋ฌธ์ javascript๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋จผ์ ์ฌ๋ ค ์ ์ธ ์ ์ ํจ์๋ฅผ ํธ์ถ์ ํ๋๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ค๋์ javascript์ hoisting์ด ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
JavaScript์์ ํธ์ด์คํ (hoisting)์ด๋, ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ธ ์ ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ ๋ณ์์ ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ถ๋ฆฌํ ํ, ์ ์ธ๋ง ์ฝ๋์ ์ต์๋จ์ผ๋ก ์ฎ๊ฒจ ๋ณ์๋ฅผ ์ ์ํ๋ ์ฝ๋๋ณด๋ค ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์์ ๋ฑ์ฅํ ์ ์์ต๋๋ค.
let/const ๋ณ์ ์ ์ธ๊ณผ ํจ์ํํ์์์๋ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ์๋ฆฌ๋ฅผ ๋ชจ๋ฅด๊ณ var ๋ณ์์ ํจ์์ ์ธ๋ฌธ์ ์ฌ์ฉํ๋ค๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ์๋์ฌ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ผญ ์์๋ฌ์ผํ๋ javasctipt์ ํน์ง์
๋๋ค.
//ํธ์ด์คํ
๋จผ์ ! var ๋ณ์ y์ ์ธ(undefined) -> x=1 (x์ด๊ธฐํ) -> y=2; ์ด๊ธฐํ
x = 1;
console.log(x + " " + y); // '1 undefined'
var y = 2;
console.log(x + " " + y);// '1 2'
JavaScript๋ ํจ์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ํจ์ ์ ์ธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ถํฐ ํ ๋นํฉ๋๋ค. ๋๋ถ์ ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ํจ์ ์ ์ธ๋ณด๋ค ์์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
catName("ํด๋ก์ด");
function catName(name) {
console.log("์ ๊ณ ์์ด์ ์ด๋ฆ์ " + name + "์
๋๋ค");
}
์๋ฌ ์์ด ๊ฒฐ๊ณผ๊ฐ์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค
func1();
// func2(); //์๋ฌ๋ธ!
function func1(){
alert('func1 ํธ์ถ๋์์!');
}
const func2 = function(){
alert('func2 ํธ์ถ๋์์!');
}
func2();
func1์ ํธ์ด์คํ ๋์์ด๋ผ ํธ์ถ์ ๋จผ์ ํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค!
์ด ๋ฌธ์๋ ๊ตญ๋น๊ณผ์ ์์
์ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง ์๋ฃ์
๋๋ค.
์์ ํ ์ฌํญ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
์ฐธ๊ณ :https://developer.mozilla.org/ko/docs/Glossary/Hoisting