๋ค์ ์ฝ๋๊ฐ ๋ฉ์ถ๋ ์ง
์ ๋ฉ์ถ๋ ์ง
๋ฅผ ๊ฒฐ์ ํ๊ณ , ๊ทธ์ ๋ํ ์ด์ ๋ฅผ ์์ฑํ์์ค.
var a = 10 ;
function func1 ( ) {
if ( a === 30 ) return ;
console . log ( a ) ;
var a = 20 ;
func2 ( ) ;
}
var func2 = function ( ) {
console . log ( a ) ;
a = a + 10 ;
func1 ( ) ;
}
func1 ( ) ;
๋ฉ์ถ์ง ์๋๋ค.
์๋ํ๋ฉด ๋ฉ์ถ๋ ์ฝ๋(func1ํจ์์ ์กฐ๊ฑด๋ฌธ)์์ a๊ฐ์ ํญ์ undefined์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ func1ํจ์์์ ์ถ๋ ฅ์ undefined์ด๊ณ , func2ํจ์์์ ์ถ๋ ฅ์ 10, 20, 30, .. ์ด๋ค.
๋์ผํ ์ค์ฝํ๋ด์์ var vs let ,const๋ก ์ ์ธํ ๋ณ์์ ์ฐจ์ด์ ์ ์์ฑํ์ธ์.
//varํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ณต ์ ์ธ์ ํ์ฉํ๋ค.
var x = 2 ;
var x = 3 ; // ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ํด x = 3๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
//let,constํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ณต์ ์ธ์ ํ์ฉํ์ง ์๋๋ค.
let x = 1 ;
let x = 3 ; // SyntaxError: Identifier 'x' has already been declared
๋ค์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์์ค
var x = 1 ;
function foo ( ) {
var y = 10 ;
bar ( ) ;
}
function bar ( ) {
console . log ( x ) ;
console . log ( y ) ;
}
foo ( ) ;
1
ReferenceError: y is not defined
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ์ ์ค์ฝํ / ๋ ์์ปฌ ์ค์ฝํ ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ํจ์๋ ํธ์ถ์ด ์๋ ์ ์ธ์ ๋ฐ๋ผ
ํจ์์ ์ค์ฝํ๋ฅผ ๊ฒฐ์ ํ๋ค. foo ํจ์๋ ์ ์ญ์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์ ์ญ ์ค์ฝํ๋ฅผ ์์ ์ค์ฝํ๋ก ๊ฐ์ง๋ค.
์ ์ญ ์ค์ฝํ์ y๊ฐ ์ ์ธ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ error๊ฐ ๋ฐ์ํ๋ค.