Hoisting

μžμ‹ μ΄ μ†ν•œ scopeμ—μ„œ μ΅œμƒλ‹¨κΉŒμ§€ λŒμ–΄μ˜¬λ¦°λ‹€.

console.log(a);//error

μ •μ˜λ˜μ§€ μ•Šμ€ aλ₯Ό 찾을 땐 error κ°€ λœ¬λ‹€.

console.log(a); //undefined
var a = 1;
console.log(a); //1

첫번째 console.log(a) μ—μ„œ errorκ°€ μ•ˆλ‚˜κ³  undefinedκ°€ λ‚˜μ˜¨λ‹€. 이게 λ°”λ‘œ Hoisting 'ㅁ'/ Hoisting을 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μœ„μ—μ„œ μ•„λž˜κΉŒμ§€ μ­‰ 읽어 λ‚΄λ €κ°€κΈ°λ§Œ ν•œλ‹€λŠ”κ²Œ μ•„λ‹ˆλΌλŠ”κ±Έ μ•Œ 수 μžˆλ‹€.

var a 
console.log(a);
a = 1;
console.log(a);

μ΄λ ‡κ²Œ 된거라고 μƒκ°ν•˜λ©΄ 쉽닀. λŒμ–΄μ˜¬λ €μ„œ 미리 λ³€μˆ˜λ₯Ό μ •μ˜ν–ˆμ§€λ§Œ 값은 μ œμžλ¦¬μ—μ„œ 넣어짐

전체가 λŒμ–΄μ˜¬λ €μ§€λŠ”κ²Œ μ•„λ‹ˆλΌ λ³€μˆ˜μ— λŒ€ν•œ μ„ μ–ΈλΆ€λΆ„λ§Œ λŒμ–΄μ˜¬λ €μ§„λ‹€.

console.log(a);
var a = 1;
console.log(a);
foo();
function foo(){
    console.log(a);
}

foo() ν•¨μˆ˜λŠ” λ¬Έμ œμ—†μ΄ μ‹€ν–‰λœλ‹€.

bar()λ₯Ό μ‹€ν–‰ν•˜λ©΄ console.log(b)κ°€ μ°νžˆλŠ”λ° bλŠ” 아직 μ •μ˜ 되기 μ „ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ ν˜Έμ΄μŠ€νŒ…μœΌλ‘œ var b κ°€ λ¨Όμ € 선언이 λ˜μ–΄ 있기 λ•Œλ¬Έμ— undefinedκ°€ λœ¬λ‹€.

μ΄λŸ°μ‹μœΌλ‘œ μƒκ°ν•˜λ©΄ 쉽닀.

Function Expressin ν•¨μˆ˜ ν‘œν˜„μ‹

λ³€μˆ˜λ‘œ μ •μ˜ν•˜κ³  ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•΄ μ€€λ‹€. d()λŠ” undefinedκ°€ λ‚˜μ˜¨λ‹€. μ™œλƒν•˜λ©΄ var d κΉŒμ§€λ§Œ hoisting 되기 λ•Œλ¬Έμ΄λ‹€.

이와 λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•˜λ©΄ μ’‹λ‹€.

Function Declaration ν•¨μˆ˜ 선언식

μ„ μ–Έμ‹μœΌλ‘œ 적은건 ν•¨μˆ˜ μžμ²΄κ°€ hoisting λœλ‹€. νšŒμ‚¬ μ»¨λ²€μ…˜μ— λ§žμΆ”μ–΄ μž‘μ—…ν•˜λ©΄ λœλ‹€.

ν•¨μˆ˜ 선언식은 μ„Έλ―Έμ½œλ‘ (;)을 찍지 μ•ŠλŠ”λ‹€.

hoisting λ˜λŠ”κ±΄ 본인이 μ†ν•œ scope κΉŒμ§€ λŒμ–΄μ˜¬λ €μ§„λ‹€.

κ·Έλž˜μ„œ undefinedκ°€ λœ¬λ‹€.

Quiz

undefinedκ°€ λœ¬λ‹€. return ꡬ문은 κ°œν–‰ν•΄μ„œλŠ” μ•ˆλ˜μ„œ..

인덱슀 in arr 인데 μΈλ±μŠ€λ„ κ²°κ΅­ 문자라 싀행이 λœλ‹€.

Last updated

Was this helpful?