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