Javascript scopes
Scope determines the accessibility (visibility) of variables.
๋ณ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฒ์
๋ด๋ถ์์ ์ธ๋ถ๋ ์ ๊ทผ ๊ฐ๋ฅ ์ธ๋ถ์์ ๋ด๋ถ๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
var a = 1;
function foo() {
var b = 2;
console.log(a);
console.log(b);
}
foo();
console.log(b); // cannot access 'b'
foo() ํจ์ ๋ด๋ถ์๋ a์ b์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, (๋ด๋ถ์์ ์ธ๋ถ์ ์ ๊ทผ ํ ์ ์๋ค.) ์ธ๋ถ์์ foo() ํจ์ ๋ด๋ถ์ ์๋ var b์๋ ์ ๊ทผ ํ ์ ์๋ค.
๋ด๋ถ ์ธ๋ถ๋ฅผ ํ๋ณํ๋ ๊ธฐ์ค์ ํจ์ ์ด๋ค.
var a = 1;
function foo () {
var a = 2;
console.log(a);
}
foo();
console.log(a);
๋ง์ง๋ง ์ค console.log(a);
๋ 1์ด๋ค. ์ธ๋ถ์์ ๋ด๋ถ var a = 2
์ ์ ๊ทผ ํ ์ ์๊ณ ํธ์ถ๊ณผ ๋์์ var a = 2๋ ์ฌ๋ผ์ง๋ค. ๋ฟ
function foo () {
var a = 10;
for (var i = 0; i < a; i++){
console.log(i);
}
console.log(i); //๋ง์ง๋ง console.log(i); ์ฐ์ ๋ถ๋ถ
}
foo();
for๋ฌธ์ด ๋๋๊ณ ๋ง์ง๋ง console.log(i)๊ฐ ์ฐํ ๋ถ๋ถ์๋ 10์ด ๋์จ๋ค.
์๋ํ๋ฉด scope ๋ฒ์๋ ํจ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. (var ๊ธฐ์ค)
IIFE ์ดํผ Immediately Invoked Function Expression ์ฆ์์คํํจ์
(function (){
var a = 1;
function foo () {
var b = 2;
console.log(a);
console.log(b);
}
//foo();
})();
foo(); //์ฆ์์คํํจ์ ๋ด๋ถ์ ์๋ ํจ์ ์คํ
IIFE๋ฅผ ์ด์ฉํด ๊ณ ์๋ก ๋ฒ์๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ง์ง๋ง foo(); ํธ์ถ์ error๊ฐ ๋ฌ๋ค. 'ใ '/ {} ๋ฒ์๋ฅผ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ 'ใ ' / ์~~
Global Scope, Global variable, Global Object
var a = 1;
function foo () {
//bar function scope
function bar() {
//foo function scope
console.log(a);
}
bar();
}
foo();
Scope chain
bar() -> foo() -> global ์์ผ๋ก ํ๊ณ ์ฌ๋ผ๊ฐ๋ค.
Global Object ๋ browser์์๋ window๋ค.
function์์ var๋ฅผ ๋ถ์ด์ง ์์ ๋ณ์๋ Global์๋ค ์ ์ํ๋ค.
function foo () { b = 2 };
foo();
๋ผ๊ณ ํ์ ๊ฒฝ์ฐ foo ์์๋ var๋ฅผ ๋ถ์ด์ง ์๋ํ์ฌ์ ๋ณ์ b๋ global์ ์ ์๋๋ค.
**global object์ key value๋ก ๋ถ๋๋ค.
console.log(window.b) //2
function foo() {
a = 1;
function bar () {
var a = 2;
console.log(a);
}
bar();
}
foo();
console.log(a);
๊ธ๋ก๋ฒ ์ค์ฝํ์ ๋จ์
var a = 'sla';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`[1 second] ${a}`);
}, 1000);
var a = 'sla2';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`[1 second] ${a}`);
}, 1000);
setTimeout ์ ์๋ ์ ๋ถ sla2
๊ฐ ๋ฌ๋ค. setTimeout์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ณ , ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ด์ ๋ณ๊ฒฝ๋ ๊ธ๋ก๋ฒ ํจ์๊ฐ ๋ฌ๋ค.
๊ธ๋ก๋ฒ ์ค์ฝํ๋ page์ 1๊ฐ๋ค.
solution
function foo () {
var a = 'sla';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`foo ํจ์์ [1 second] ${a}`);
}, 1000);
}
foo();
var a = 'sla2';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`[1 second] ${a}`);
}, 1000);
์ด๋ ๊ฒ foo()๋ผ๊ณ ์ด๊ฒ๋ ๊ธ๋ก๋ฒ ์ค์ฝํ์ ํฌํจ๋๋ค.
(function(){
var a = 'sla';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`foo ํจ์์ [1 second] ${a}`);
}, 1000);
})()
var a = 'sla2';
console.log(`[On Load] ${a}`);
setTimeout(function () {
console.log(`[1 second] ${a}`);
}, 1000);
์ฆ์์คํํจ์๋ฅผ ์ฐ๋๊ฒ ๋ ์์ ํ๋ค.
Last updated
Was this helpful?