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λŠ” 사라진닀. λΏ…

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