JavaScript์์ ํธ์ด์คํ (hoisting)์ด๋, ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ธ ์ ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. var๋ก ์ ์ธํ ๋ณ์์ ๊ฒฝ์ฐ ํธ์ด์คํ ์ undefined๋ก ๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๋ฐ๋ฉด let๊ณผ const๋ก ์ ์ธํ ๋ณ์์ ๊ฒฝ์ฐ ํธ์ด์คํ ์ ๋ณ์๋ฅผ ์ด๊ธฐํํ์ง ์์ต๋๋ค. -MDN
ํ๋ก๊ทธ๋จ์์ ์ด๋ค ๋ณ์๊ฐ ์ ์๋์ด ์๋ ์์ญ
์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์ ์ ํจ๋ฒ์๋ ๋ณ์๋ฅผ ์ด๋์์ ์ ๊ทผ ํ ์ ์๋์ง๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์ ์ญ๋ณ์ ์ง์ญ๋ณ์ ์ฝ๋
var scope = "์ ์ญ๋ณ์"; // ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ๋ค.
function checkscope(){
var scope = "์ง์ญ๋ณ์"; // ์ ์ญ ๋ณ์์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ง์ญ๋ณ์๋ฅผ ์ ์ธํ๋ค.
return scope;
}
checkscope();
ํจ์ ์ ์๋ ์ค์ฒฉ๋ ์ ์์ต๋๋ค. ๊ฐ ํจ์์๋ ์์ ๋ง์ ์ ํจ๋ฒ์๊ฐ ์กด์ฌํ๋ฏ๋ก ์ ํจ๋ฒ์๊ฐ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ค์ฒฉ๋ ์ ์์ต๋๋ค.
var scope = "์ ์ญ๋ณ์";
function checkscope(){
var scope = "์ง์ญ๋ณ์";
function nested(){
var scope = "์ค์ฒฉ๋ณ์"; // ํจ์ ์์ ํฌํจ๋ ์ ํจ๋ฒ์์ ์ง์ญ ๋ณ์
return scope;
}
return nested();
}
checkscope(); // "์ค์ฒฉ๋ณ์" ๋ฆฌํด
์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ธ๋ก๋ด์ ์ ํจ๋ฒ์๊ฐ ์กด์ฌํ๋ฉฐ ๋ธ๋ก๋ด์์ ์ ์ธ๋ ๋ณ์๋ *
๋ธ๋ก ๋ฐ๊นฅ์์๋ ์ ๊ทผ ํ ์ ์๋ C๊ฐ์ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ธ๋ก ์ ํจ๋ฒ์๊ฐ ์์ต๋๋ค. ์ฆ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ธ๋ก์ด ๋ซํ ์ดํ์๋ ์๋์ฒ๋ผ ์ ๊ทผํ ์ ์์ต๋๋ค.
*
๋ธ๋ก:์ฝ๋ ๋ด์์ ์ค๊ดํธ({})๋ก ๋๋ฌ์ธ์ธ ๋ถ๋ถ์ ๊ฐ๋ฆฌํต๋๋ค.{
var i = 1
}
console.log(i) /// 1
๋ค๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ ์ ํจ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
function test(o) {
var i = 0;
if (o) {
var j = 0;
for (var k = 0; k < 10; k++) {
console.log("for", k);
}
console.log("k", k);
}
console.log("j", j);
}
์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ์ ํจ๋ฒ์๋ ์ ํจ์ ์์์ ์ ์ธ๋ ๋ชจ๋ ๋ณ์๊ฐ ํจ์ ์ ์ฒด์ ๊ฑธ์ณ ์ ๊ทผํ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค. ์ฌ๊ธฐ์์ ํธ์ด์คํ ์ด ๋ํ๋๋๋ฐ ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์๋์ ์ฝ๋๋ก ์์ธํ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
var scope="global";
function f (){
1๏ธโฃ console.log(scope); //'undefined' ํธ์ด์คํ
์ด๊ธฐํ
2๏ธโฃ var scope ="local";
3๏ธโฃ console.log(scope); // 'local'
}
var scope = "global";
function f() {
var scope;
console.log(scope); //'undefined'
scope = "local";
console.log(scope); // 'local'
}
ํด๋น ๊ธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฒฝ๊ฐ์ด๋(๋ฐ์ด๋น๋ ํ๋๋๊ฑด), ์น์ฌ์ดํธ ๋ฑ์ ์ฐธ๊ณ ํ์ฌ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
[JavaScript] ์์๋ก ๋ฐฐ์ด์ ๊ทผ array.prototype.at() (0) | 2022.04.27 |
---|---|
[JavaScript] JSON, Javascript Object (0) | 2022.04.24 |
[JavaScript] Syntactic Sugar (0) | 2022.01.09 |
[JavaScript] JS DOM (0) | 2022.01.02 |
[JavaScript] Runtime Stack, Queue, Eventloop (0) | 2021.12.31 |