πŸŽͺScope

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μŠ€μ½”ν”„λž€ μ–΄λ–€ λ³€μˆ˜λ“€μ— μ ‘κ·Όν•  수 μžˆλŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ’…λ₯˜λŠ” 두가지가 μžˆμŠ΅λ‹ˆλ‹€.

μ „μ—­μŠ€μ½”ν”„(μ½”λ“œ μ–΄λ””μ—μ„œλ“ μ§€ μ°Έμ‘°κ°€λŠ₯)
μ§€μ—­μŠ€μ½”ν”„(ν•¨μˆ˜ μ½”λ“œ 블둝이 λ§Œλ“  μŠ€μ½”ν”„λ‘œ ν•¨μˆ˜ μžμ‹ κ³Ό ν•˜μœ„ ν•¨μˆ˜μ—μ„œλ§Œ μ°Έμ‘°) μž…λ‹ˆλ‹€.

var whoAmI = 'globalScope'; // μ „μ—­

function localFunc () {
  var whoAmI = 'localScope';
  console.log(local);
} //지역

localFunc(); // ?
console.log(whoAmI); // ?

μœ„ λ¬Έμ œμ—μ„œ 전역에 μ„ μ–Έλœ λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“  μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ localFunc λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” localFunc λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 있고 μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

  • ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„
    ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ§€κ°œλ³€μˆ˜μ™€ λ³€μˆ˜λŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μœ νš¨ν•˜μ§€ μ•Šλ‹€.
let global = '100'; // μ „μ—­λ³€μˆ˜

(function () {
  let local = '200'; // μ§€μ—­λ³€μˆ˜
})(); 
/*
μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ 
(function () {
    ....
 })(); 
 말 κ·ΈλŒ€λ‘œ ν•¨μˆ˜λ₯Ό μ¦‰μ‹œ μ‹€ν–‰μ‹œμΌœ μ€€λ‹€.
*/
console.log(global);    // 100
console.log(local);        // 'local' is not defined

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•œλ‹€. ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ§€κ°œλ³€μˆ˜μ™€ λ³€μˆ˜λŠ” ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ 유효 ν•˜μ§€ μ•Šλ‹€.
  • 예제 1
let iAm = 'global';

function localOne() {
  let iAm = 'local';
  console.log(iAm);

  function localTwo() {  // λ‚΄λΆ€ν•¨μˆ˜
    console.log(iAm); // ?
  }

  localTwo();
}
localOne()
console.log(iAm); // ?

닡은 local, local , global이 λ‚˜μ˜¨λ‹€

예제 1μ—μ„œ localTwo() μ‹€ν–‰ν•˜λ©΄ iAm을 μ°ΎλŠ”λ‹€. 즉, λ‚΄λΆ€ν•¨μˆ˜λŠ” μžμ‹ μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” μ™ΈλΆ€ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€.