all is well!!
[ํญํด99 3์ฃผ์ฐจ] React ์ ๋ฌธ์ฃผ์ฐจ S.A. ๋ณธ๋ฌธ
๐ JavaScript์ ์๋ฃํ๊ณผ JavaScript๋ง์ ํน์ฑ์ ๋ฌด์์ผ๊น ?
1. ๋์จํ ํ์ (loosely typed)์ ๋์ (dynamic) ์ธ์ด
JavaScript๋ ํ์ ์ด '๋งค์ฐ ์ ์ฐํ ์ธ์ด'๋ก ๋์จํ ํ์ (loosely typed)์ ๋์ (dynamic) ์ธ์ด์ ๋๋ค.
JavaScript์ ๋ณ์๋ ๊ฐ์ด ์ด๋ค ํ์์ ๊ฐ์ ๋ก ๋ฌถ์ฌ์์ง์๊ณ , ๋ชจ๋ ํ์ ์ ๊ฐ์ผ๋ก ํ ๋น / ์ฌํ ๋น ๊ฐ๋ฅํฉ๋๋ค.
ex) Subin์ด๋ผ๋ ๋ณ์์ ๊ฐ์ ๋ฐ๋ผ ์ซ์ / ๋ฌธ์์ด / ๋ถ๋ฆฌ์ธ์ผ๋ก ํ ๋น ๋ฐ ์ฌํ ๋น ๊ฐ๋ฅ.
let Subin = 28 //์ซ์
Subin = '๋ฏธ๋์ ํ๋ก ํธ์๋' //๋ฌธ์์ด
Subin = true //๋ถ๋ฆฌ์ธ
2. JavaScript ํ๋ณํ
ํ๋ณํ์ ๋ช ์์ ํ๋ณํ(explicit coercion)๊ณผ ์์์ ํ๋ณํ(implicit coercion)์ด ์์ต๋๋ค.
*๋ช ์์ ๋ณํ(explicit coercion)
๋ช ์ : ๋ด์ฉ์ด๋ ๋ป์ ๋ถ๋ช ํ๊ฒ ๋๋ฌ๋ด ๋ณด์ด๋. ๋๋ ๊ทธ๋ฐ ๊ฒ'์ ์๋ฏธ.
Number("123") ์ฒ๋ผ ํ๋ก๊ทธ๋๋จธ์ ์ฝ๋์์ ์๋ฃํ์ ์ ํด์ ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค.
*์์์ ํ๋ณํ(implicit coercion)
์ฐ์ฐ์ ์ฌ์ฉ์ผ๋ก ์ธํด ์์ฐ์ ์ผ๋ก ์ผ์ด๋๋ ํ๋ณํ์ ๋๋ค.
๋ํ์ ์ธ ์ฐ์ฐ์๋ก๋ ==, +, > ๋ฑ์ด ์์ต๋๋ค.
์ฌ๊ธฐ์ ์์ธ๋ก ===๋ ํ๋ณํ์ ์ผ์ผํค์ง ์์ต๋๋ค.
์ด๊ฒ ==์ ===์ ์ฐจ์ด์ ๊ฐ์ต๋๋ค.
[์ฌ๊ธฐ์ ์์๋ณด๋ = / == / ===์ ์ฐจ์ด]
// = : ๋์
์ฐ์ฐ์
// == : ๊ด๊ณ ์ฐ์ฐ์ / ๊ฐ์ด ๊ฐ์๊ฐ?
// === : ๊ด๊ณ ์ฐ์ฐ์ / ์๊ฒฉํ๊ฒ ๊ฐ์๊ฐ์ธ๊ฐ? (๋ฐ์ดํฐ ํ์
๊น์ง ๊ฐ์์ผ ๋จ.)
var num1=9;
var num2="9";
var result = (num1==num2)
document.write(result,"<br>")//true
//์ฌ๊ธฐ์ num1๊ณผ num2๊ฐ ๊ฐ์๊น์?
//์๋๋ ๋ค๋ฅด๊ฒ ๋์์ผ๋ ๊ฑฐ ๊ฐ์๋ฐ..??
//์๋๋ฉด ์ ์9๋ ๋ฌธ์"9"๋ ๋ถ๋ช
ํ ๋ค๋ฅด๋๊น์!
//ํ์ง๋ง ==๋ฅผ ์จ์ ๊ฐ๋ง ๊ฐ์ผ๋ฉด ๊ฐ๋ค๊ณ ์ธ์์ ํด์
//9๋ "9" ๋ ๋ฐ์ดํฐ ํ์
์ ๋ค๋ฅด์ง๋ง, true ์
๋๋ค.
//"9"๋ฅผ ํ๋ณํ ํ๋ค๋ฉด 9๋ ๊ฐ์์งํ
๋๊น ๊ฐ์ ๊ฐ๋ค๊ณ ๋ด
๋๋ค.
result = (num1===num2)//false
document.write(result,"<br>")//false
//num1๊ณผ num2๊ฐ ์๊ฒฉํ๊ฒ ๊ฐ์๊ฐ?
//===์ ๊ฐ๋ฟ๋ง์๋๋ผ, ๋ฐ์ดํฐ ํ์
(๋ฌธ์์ด์ธ์ง ์ซ์์ธ์ง...)๊น์ง ๊ฐ์์ผ true์
๋๋ค.
js์์ ํ๋ณํ์ String / Number / Boolean 3๊ฐ์ง ์ ๋๋ค.
* String conversion / conversion(๋ณํ)
String()์ ์ซ์์ด์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์๋ก ์ฝ๋์์ ์ง์ ์๋ฃํ์ ์ ํด์ฃผ๋
๋ช ์์ ํ๋ณํ์ผ๋ก ์ฐ๊ณ ์ถ์๋ ์๋๋ค.
* Boolean conversion
Boolean()์ ๋ช ์์ ํ๋ณํ์ผ๋ก ์ฐ๊ณ ์ถ์๋ ์๋๋ค.
์์์ ์ผ๋ก๋ true false๋ฅผ ๊ฐ๋ฅด๋ ๊ฒ์ด๊ธฐ์ ๋ ผ๋ฆฌ์ฐ์ฐ์๋ค ( ||(or), &&, ! )์ ์ํด ์ผ์ด๋ฉ๋๋ค.
||(or)์ &&(and)๋ ์กฐ๊ฑด์ ๋ง๋ ์ค์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ ํ๋ณํ์ด ์ผ์ด๋ฉ๋๋ค.
[์ฌ๊ธฐ์ ์์๋ณด๋ ๋ ผ๋ฆฌ์ฐ์ฐ์]
๋
ผ๋ฆฌ ์ฐ์ฐ์:๋
ผ๋ฆฌ ๊ฐ์ง๊ณ ์ฐ์ฐํ๋ ์ฐ์ฐ์
&& , || , !
|| - ์ฌํํธ+๋ฐฑ์คํ์ด์ค๋ฐ์
&& - ๋
ผ๋ฆฌ AND
|| - ๋
ผ๋ฆฌ OR
! - ๋
ผ๋ฆฌ NOT
* Number conversion
Number()์ ๋ช ์์ ํ๋ณํ์ผ๋ก ์ฐ๊ณ ์ถ์๋ ์๋๋ค.
์์์ ์ผ๋ก๋ ๋ง์ด ๋ถ๋ฆฌ๋๋ฐ
1. ๋น๊ต ์ฐ์ฐ์ (>, <, <=, >=, !=, ==) (๋จ, ๋ ํผ์ฐ์ฐ์๊ฐ ๋ชจ๋ String์ผ ๋๋ ์ ์ธ)
2. ๋นํธ ์ฐ์ฐ์ (|, &, ^, ~)
3. ์ฐ์ ์ฐ์ฐ์ (-, +, *, /, %) (๋จ, +์ ์ฐ์ฐ์์ String์ด ์์ ๋๋ ์ ์ธ)
4. ๋จํญ ์ฐ์ฐ์ (+)
์ด๋ ๊ฒ ์ ๋ฆฌ๋ ์ ์์๊ฒ ๊ฐ์ต๋๋ค.
3. ๋์จํ ํ์ (loosely typed)์ ๋์ (dynamic) ์ธ์ด์ ๋ฌธ์ ์ ๊ณผ ๋ณด์๋ฐฉ๋ฒ
์์์ ๋งํ๋ฏ์ด ์ ์ฐํ ์ธ์ด์ด๊ธฐ์ ์คํ ๋์ค์ ๋ณ์์ ์์์น ๋ชปํ ํ์ ์ด ๋ค์ด์ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ํ์ ์ธ์ด๋ ๋ฐํ์ ์ ํ์ธํ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์, ์ฝ๋๊ฐ ๊ธธ๊ณ ๋ณต์กํด์ง ๊ฒฝ์ฐ ํ์ ์๋ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ ์ง๋๋ค.
๊ทธ๋์ ๊ทธ ๋ณด์๋ฐฉ๋ฒ์ผ๋ก
TypeScipt๋ Flow ๋ฑ์ ์๋๋ค.
4. undefined์ null์ ๋ฏธ์ธํ ์ฐจ์ด
* undefined
‘์๋ฌด ๊ฐ๋ ํ ๋น๋ฐ์ง ์์ ์ํ’๋ฅผ ์๋ฏธํฉ๋๋ค.
var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์๋ฌต์ ์ผ๋ก undefined๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
๋ณ์ ์ ์ธ์ ์ํด ๊ฐ์ ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฒ์ ํ ๋น์ด ์ด๋ค์ง ๋๊น์ง ๋น ์ํ๋ก ๋ด๋ฒ๋ ค๋์ง ์๊ณ
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด 'undefined'๋ก ์ด๊ธฐํ ํฉ๋๋ค.
๊ทธ๋์ ๋ณ์๋ฅผ ์ ์ธํ ์ดํ ๊ฐ์ ํ ๋นํ์ง ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ฉด undefined๊ฐ ๋ฐํ๋ฉ๋๋ค.
*null
‘๋น์ด์๋, ์กด์ฌํ์ง ์๋ ๊ฐ'(๊ฐ์ ๋ถ์ฌ)์ ์๋ฏธํฉ๋๋ค.
๋ณ์์ null์ ํ ๋น์ ํ๋ฉด ๋ณ์๊ฐ ์ด์ ์ ์ฐธ์กฐํ๋ ๊ฐ์ ๋ ์ด์ ์ฐธ์กฐํ์ง ์์ต๋๋ค.
๋ค์๋งํด์ ์ด์ ์ ํ ๋น๋์ด ์๋ ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ null์ ๋ณ์์ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ์๋์ ์ผ๋ก ๋ช ์(์๋์ ๋ถ์ฌ)ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
๐ JavaScript ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ด๋ ?
1. ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ
*๊ธฐ๋ณธํ ๋ฐ์ดํฐ(Primative Type)
๊ธฐ๋ณธํ ๋ฐ์ดํฐ๋ ๋จ์ ๋ฐ์ดํฐ
Number, String, Boolean, Null, Undefined
๋ก ๊ฐ์ ๊ทธ๋๋ก ํ ๋นํฉ๋๋ค.
๊ฐ์ ๊ทธ๋๋ก ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ์ ์ฅ๋๋ฉฐ ์์ ๋ฐ์ดํฐ ๊ฐ ์์ฒด๋ฅผ ๋ณด๊ดํด์ ๋ถ๋ณ์ฑ ์
๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.(์ฌ์ฌ์ฉ)
*์ฐธ์กฐํ ๋ฐ์ดํฐ(Reference Type)
์ฐธ์กฐ ํ์ ์ ๋ณ์์ ํ ๋นํ ๋ ๊ฐ์ด ์๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ธ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ์์ ํ์ ๋๋ ๊ธฐ์กด์ ๊ฐ์ฒด๋ ๋ณํด์ ๊ฐ๋ณ์ฑ ์ ๋๋ค.
์ฐธ์กฐํ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์งํฉ์ผ๋ก ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ง์ ๋ ์ฃผ์๊ฐ์ ํ ๋นํฉ๋๋ค.
2. ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
๋ถ๋ณ ๊ฐ์ฒด๋ ํ ๋ฒ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด, ๋ณํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ทธ๋์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์, ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ง๋ง ์๋ณธ๊ฐ์ฒด๋ ์ ์งํ๊ณ ์ถ์๋ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
[ ๊ฐ์ฒด์ ๋ณํ๋ฅผ ๊ฐํด๋ ์๋ณธ์ด ๊ทธ๋๋ก ๋จ์์์ด์ผ ํ๋ ๊ฒฝ์ฐ
ex) ์ ๋ณด๊ฐ ๋ฐ๋์์ผ๋ฉด ์๋ฆผ ์ ์กํ๋ ๊ฒฝ์ฐ, ๋ฐ๋๊ธฐ ์ ์ ์ ๋ณด์ ๋ฐ๋ ํ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค์ผํ๋ ๊ฒฝ์ฐ ๋ฑ]
๋ถ๋ณ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ธฐ์กด ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๊ฒ ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ง์์๋ก ์ฝ๋ฉ์ ์์ด ๋ง์์ง๊ณ ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ ์๊ณ ๋ฅผ ๋๊ธฐ์ํด
ํ๋กํผํฐ ๊ฐ์์ ์๊ด ์์ด ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋๊ฒ์๋ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ๊ฐ ์์ต๋๋ค.
3. ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
์์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ(์ฃผ์ ๊ฐ)์ ๋ณต์ฌํ๊ณ , ๊น์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ์ค์ ๊ฐ์ ๋ณต์ฌํฉ๋๋ค.
*์์ ๋ณต์ฌ
๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋, ํด๋น ๊ฐ์ฒด๋ง ๋ณต์ฌํ์ฌ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
๋ณต์ฌ๋ ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์๋ ์๋ณธ ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ฉฐ
ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ณ์ ๊ฐ ์ญ์ ๋์ผํ๊ฒ ๋ณ๊ฒฝ๋ฉ๋๋ค.
*๊น์ ๋ณต์ฌ
๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ ํด๋น ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์๊น์ง ๋ณต์ฌํฉ๋๋ค.
๋ฐ์ดํฐ ์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ฒด์ ํํ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํจ์ผ๋ก์จ ํ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฐ์ดํฐ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๐ ํธ์ด์คํ ๊ณผ TDZ๋ ๋ฌด์์ผ๊น?
1. ์ค์ฝํ, ํธ์ด์คํ , TDZ
*์ค์ฝํ(Scope)
Scope๋ฅผ ์ฐ๋ฆฌ๋ง๋ก ๋ฒ์ญํ๋ฉด ‘๋ฒ์’๋ผ๋ ๋ป์ผ๋ก ์ค์ฝํ(Scope)๋ ‘๋ณ์์ ์ ๊ทผํ ์ ์๋ ๋ฒ์'์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ค์ฝํ๋ global(์ ์ญ)๊ณผ local(์ง์ญ) 2๊ฐ์ง ํ์ ์ด ์์ต๋๋ค.
์ ์ญ ์ค์ฝํ(Global Scope)๋ ๋ง ๊ทธ๋๋ก ์ ์ญ์ ์ ์ธ๋์ด์์ด ์ด๋ ๊ณณ์์๋ ์ง ํด๋น ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ง์ญ ์ค์ฝํ(Local Scope)๋ ํด๋น ์ง์ญ์์๋ง ์ ๊ทผํ ์ ์์ด ์ง์ญ์ ๋ฒ์ด๋ ๊ณณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
*ํธ์ด์คํ (Hoisting)
ํจ์ ์์ ์๋ ์ ์ธ๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค์ ํด๋น ํจ์ ์ ํจ ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๋ ๊ฒ์ผ๋ก
ํจ์ ๋ด์์ ์๋์ชฝ์ ์กด์ฌํ๋ ๋ด์ฉ ์ค ํ์ํ ๊ฐ๋ค์ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์
๋๋ค.
์ค์ ๋ก ์ฝ๋๊ฐ ๋์ด์ฌ๋ ค์ง๋ ๊ฑด ์๋๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ Parser ๋ด๋ถ์ ์ผ๋ก ๋์ด์ฌ๋ ค์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ทธ๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ์์๋ ๋ณํ๊ฐ ์์ต๋๋ค.
*TDZ
TDZ(Temporal Dead Zone) ๋, ํ๊ธ๋ก ์ง์ญํ์๋ฉด ์ผ์์ ์ธ ์ฌ๊ฐ์ง๋๋ ๋ป์ ๋๋ค.
์ด ์ผ์์ ์ธ ์ฌ๊ฐ์ง๋๋ ์ค์ฝํ์ ์์ ์ง์ ๋ถํฐ ์ด๊ธฐํ ์์ ์ง์ ๊น์ง์ ๊ตฌ๊ฐ์ TDZ(Temporal Dead Zone) ๋ผ๊ณ ํฉ๋๋ค.
2. ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์์ ํธ์ด์คํ ๋ฐฉ์์ ์ฐจ์ด
ํจ์ ์ ์ธ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง๋ง, ํจ์ ํํ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
3. ์คํ ์ปจํ ์คํธ์ ์ฝ ์คํ
*์คํ์ปจํ ์คํธ(Execution Context)
์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด์ ๋๋ค.
๋ชจ๋ ์ฝ๋๋ ํน์ ํ ์คํ ์ปจํ ์คํธ ์์์ ์คํ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ์ฃผ์ํ ์คํ ์ปจํ ์คํธ์๋ Global Execution Context์ Fuction Execution Context๊ฐ ์์ต๋๋ค.
Global Execution Context
๋ํดํธ ์คํ ์ปจํ ์คํธ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์์ง์ ์ํด ์ฒ์ ๋ก๋๋์์ ๋ ์คํ๋๊ธฐ ์์ํ๋ ํ๊ฒฝ์ ๋๋ค.
Fuction Execution Context
Execution context๋ฅผ ๋ฐ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํจ์๋ฅผ ์คํํ๋ ๊ฒ ๋ฟ์ ๋๋ค.
๊ทธ๋์ ํจ์ ์คํ ์ปจํ ์คํธ๋ ํจ์๊ฐ ํธ์ถ๋๊ณ ์คํ๋จ์ ๋ฐ๋ผ์ ํด๋น ํจ์ ์์์ ์์ฑ๋๋ ์ปจํ ์คํธ์ ๋๋ค.
๊ฐ๊ฐ์ ํจ์๋ ๊ณ ์ ์ ์คํ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ ์ญ ์คํ ์ปจํ ์คํธ์ ์ธ์ ๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
*์ฝ์คํ(callstack)
call์ ํธ์ถ์ ๋ปํ๊ณ stack์ ์ถ์ ๊ตฌ๊ฐ ํ๋๋ฟ์ธ ๊น์ ์ฐ๋ฌผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
๋ฐ๋ผ์ callstack์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํจ์ ํธ์ถ์ ๊ธฐ๋กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฐ๋ฌผ ํํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
ํญ์ ๋งจ ์์ ๋์ธ ํจ์๋ฅผ ์ฐ์ ์ผ๋ก ์คํ๋๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ์ฅ ์์ ์์ฌ์๋ context์ ๊ด๋ จ ์๋
์ฝ๋๋ค์ ์คํํ๋ ์์ผ๋ก ์ ์ฒด ์ฝ๋์ ํ๊ฒฝ๊ณผ ์์๋ฅผ ๋ณด์ฅํฉ๋๋ค.
4. ์ค์ฝํ ์ฒด์ธ, ๋ณ์ ์๋ํ
*์ค์ฝํ์ฒด์ธ
์ค์ฝํ(์๋ณ์์ ์ ํจ ๋ฒ์)๋ฅผ ์์์๋ถํฐ ๋ฐ๊นฅ์ผ๋ก ์ฐจ๋ก์ฐจ๋ก ๊ฒ์ํด ๋๊ฐ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฌ๋ฌ ์ค์ฝํ์์ ๋์ผํ ์๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ, ๋ฌด์กฐ๊ฑด ์ค์ฝํ ์ฒด์ธ ์์์ ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ๋ ์๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
*๋ณ์ ์๋ํ
์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉด ์ ๋๋ ๋ณ์์ ๋ํ ์ ๊ทผ์ ๋ง๋ ๊ฒ์ ๋ณ์ ์๋ํ๋ผ๊ณ ํฉ๋๋ค.
๐ ์ค์ต ๊ณผ์
์ฝ์์ ์ฐํ b ๊ฐ์ ์์ํด๋ณด๊ณ , ์ด๋์์ ์ ์ธ๋ “b”๊ฐ ๋ช๋ฒ์งธ ๋ผ์ธ์์ ํธ์ถํ console.log์ ์ฐํ๋์ง, ์ ๊ทธ๋ฐ์ง ์ค๋ช ํด๋ณด์ธ์. ์ฃผ์์ ํ์ด๋ณด๊ณ ์ค๋ฅ๊ฐ ๋๋ค๋ฉด ์ ์ค๋ฅ๊ฐ ๋๋ ์ง ์ค๋ช ํ๊ณ ์ค๋ฅ๋ฅผ ์์ ํด๋ณด์ธ์.
let b = 1; // ํจ์๋ฐ์ ์์ด์ ์ด๋ค ์์น์์๋ ์ธ์์๋ ์ ์ญ๋ณ์
function hi () { //hi๋ผ๋ ํจ์
const a = 1; //ํจ์ ์์์๋ ์ง์ญ๋ณ์ a(const๋ผ์ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ)
let b = 100; //ํจ์ ์์์๋ ์ง์ญ๋ณ์ b(let๋ผ์ ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ)
b++; //b๋ฅผ 1์ฆ๊ฐํด๋ผ.
console.log(a,b);
}
//console.log(a); // ์๋ฌ๋๋ ์ด์ : ์ ์ญ๋ณ์์๋ a ๋ณ์๊ฐ ์์ด์ ๊ฐ์ ๋ถ๋ฌ์ฌ๊ฒ ์์ด์ ์๋ฌ๊ฐ ๋จ.
console.log(b); // ํจ์๋ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์ญ๋ณ์ b๋ฅผ ๋ถ๋ฅด๋๊ฑฐ์ฌ์ ์ฝ์์ฐฝ์ 1์ด ์ฐํ.
hi(); // hi๋ผ๋ ํจ์๋ฅผ ๋ถ๋ฌ์์ (1,101)์ด ์ฐํ
console.log(b); // ํจ์๋ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์ญ๋ณ์ b๋ฅผ ๋ถ๋ฅด๋๊ฑฐ์ฌ์ ์ฝ์์ฐฝ์ 1์ด ์ฐํ.'weekly ํ๊ณ ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ๋ก ํธ์๋ 3๊ธฐ WIL - ์์ํ๋ ๋ง์ (0) | 2024.06.15 |
|---|---|
| [ ํญํด 6์ฃผ์ฐจ ํ๊ณ ๋ก] ๋ฏธ๋ ํ๋ก์ ํธ (0) | 2022.08.07 |
| [ ํญํด 4์ฃผ์ฐจ ํ๊ณ ๋ก] ์ฃผํน๊ธฐ์๋ จ (0) | 2022.07.17 |
| ํญํด1์ฃผ์ฐจ S.A [10ํ] (0) | 2022.06.20 |
| ํญํด์ค๋น-0์ฃผ์ฐจ(html+css+jsp์ฌ~๋) (0) | 2022.06.01 |