01 λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„μ™€ ν΄λ‘œμ €

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜μ§€ν–₯ μ–Έμ–΄μž„ -> κ°œλ°œμžν•œν…Œ 투머치 자유λ₯Ό 쀌
  • ν•¨μˆ˜ 동적생성도 κ°€λŠ₯ν•˜κ³ , μƒμ„±ν•œ ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ— 인수둜 λ„˜κΈΈμˆ˜λ„ 있고 μƒμ„±λœ 곳이 μ•„λ‹Œ κ³³μ—μ„œ ν•¨μˆ˜λ₯Ό 호좜 ν•  수 있기 λ•Œλ¬Έ
  • 또 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν•¨μˆ˜ 외뢀에 μžˆλŠ” λ³€μˆ˜μ— μ ‘κ·Ό ν•  수 도 있음,,,

그러면? ν•¨μˆ˜κ°€ μƒμ„±λœ 이후에 μ™ΈλΆ€ λ³€μˆ˜κ°€ λ³€κ²½λ˜λ©΄?
ν•¨μˆ˜λŠ” μƒˆλ‘œμš΄ 값을 κ°€μ Έμ˜€λ‚˜?
ν˜ΈμΈ¨λ˜λŠ” 곳을 κΈ°μ€€μœΌλ‘œ μ™ΈλΆ€λ³€μˆ˜μ— μ ‘κ·Όν•˜λ‚˜???

μ•„μ£Ό κ°„λ‹¨ν•œ^^ λ¬Έμ œλ“€μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— 이λ₯Ό μ•ŒκΈ°μœ„ν•΄ λ°°μ›Œμ•Όν•©λ‹ˆλŒœ,.,

02 μ½”λ“œ 블둝

  • 일단 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” {...} μ•ˆμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ—¬κΈ° μ•ˆμ—μ„œλ§Œ μ‚¬μš© ν•  수 있음

μ˜ˆμ‹œ:

{
  // μ§€μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‘°μž‘ν•΄λ„ κ²°κ³Όλ₯Ό λ°–μ—μ„œ λ³Ό 수 μ—†μŒ

  let message = "Hi"; // 블둝 λ‚΄μ—μ„œλ§Œ κ°€λŠ₯

  alert(message); // μ•ˆλ…•ν•˜μ„Έμ˜Ή
}

alert(message); // ReferenceError: message is not defined
  • κ·Έλž˜μ„œ 이런 λΈ”λ‘μ˜ νŠΉμ§•μ€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό λ¬Άμ–΄λ‘λŠ” μ—­ν• λ‘œ μ‚¬μš©ν•  수 있음
  • λΈ”λ‘μ•ˆμ—λŠ” μž‘μ—…μ— ν•„μš”ν•œ λ³€μˆ˜λ§Œ μ‚¬μš©ν•˜λŠ” ν˜•μ‹
{
  // λ©”μ‹œμ§€ 좜λ ₯
  let message = "μ•ˆλ…•ν•˜μ„Έμš”.";
  alert(message);
}

{
  // 또 λ‹€λ₯Έ λ©”μ‹œμ§€ 좜λ ₯
  let message = "μ•ˆλ…•νžˆ κ°€μ„Έμš”.";
  alert(message);
}

블둝이 μ—†μœΌλ©΄ μ—λŸ¬ λ°œμƒν•¨ 이미 μ„ μ–Έλœ λ³€μˆ˜μ™€ λ™μΌν•œ 이름을 κ°€μ§„ λ³€μˆ˜μ„ λ³„λ„μ˜ 블둝 없이 let으둜 μ„ μ–Έν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•¨

// λ©”μ‹œμ§€ 좜λ ₯
let message = "μ•ˆλ…•ν•˜μ„Έμš”.";
alert(message);

// 또 λ‹€λ₯Έ λ©”μ‹œμ§€ 좜λ ₯
let message = "μ•ˆλ…•νžˆ κ°€μ„Έμš”."; // SyntaxError: Identifier 'message' has already been declared
alert(message);

03 쀑첩 ν•¨μˆ˜

  • ν•¨μˆ˜ 내뢀에 μ„ μ–Έν•œ ν•¨μˆ˜? 쀑첩(nested)ν•¨μˆ˜λΌκ³  뢀름
  • jsμ—μ„œλŠ” λ°œλ‘œλ„ μ€‘μ²©ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 있음
  • μ½”λ“œλ₯Ό μ •λ¦¬ν•˜λŠ”λ°λ„ μ“°μž„

μ˜ˆμ‹œ:

function sayHiBye(firstName, lastName) {
  // 헬퍼(helper) 쀑첩 ν•¨μˆ˜
  function getFullName() {
    return firstName + " " + lastName;
  }

  alert("Hello, " + getFullName());
  alert("Bye, " + getFullName());
}
  • μ€‘μ²©ν•¨μˆ˜λŠ” μƒˆλ‘œμš΄ 객체의 ν”„λ‘œνΌν‹° ν˜•νƒœλ‚˜ 쀑첩 ν•¨μˆ˜ κ·Έ 자체둜 λ°˜ν™˜λ  수 있음
  • μ΄λŸ¬μ½”λ‘¬ λ°˜ν™˜λ˜λ©΄ μ–΄λ””μ„œλ“  ν˜ΈμΆœν•΄ μ‚¬μš© κ°€λŠ₯함
  • λ¬Όλ‘  μ΄λ•Œλ„ μ™ΈλΆ€λ³€μˆ˜μ— μ ‘κ·Ό ν•  수 μžˆλ‹€λŠ” 사쉴

μ˜ˆμ‹œ:

function makeCounter() {
  let count = 0;

  return function () {
    return count++;
  };
}

let counter = makeCounter();

alert(counter()); // 0
alert(counter()); // 1
alert(counter()); // 2
  • 이거 보면 counter을 μ—¬λŸ¬κ°œ λ§Œλ“€λ©΄? μ„œλ‘œ λ…λ¦½μ μΌκΉŒ?
  • μ•„λ‹ˆλ©΄ ν•¨μˆ˜μ™€ μ€‘μ²©ν•¨μˆ˜ λ‚΄ count λ³€μˆ˜μ—λŠ” μ–΄λ–€ 값이 할당될 까??

이거 ν•΄κ²°ν•˜λ©΄ js 쀑급 κ°€λŠ₯ν•©λ‹ˆλ‹€,,,

04 λ ‰μ‹œμ»¬ ν™˜κ²½

λ¨Έλ¦¬μ•„ν”Œ μ€€λΉ„ ν•΄μ•Όν• λ“―,,,

1단계-λ³€μˆ˜

  • jsμ—μ„œ 싀행쀑인 ν•¨μˆ˜, μ½”λ“œλΈ”λ‘{...}, 슀크립트 μ „μ²΄λŠ” λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Environment) 라 λΆˆλ¦¬λŠ” 내무 μˆ¨κΉ€ μ—°κ΄€ 객체(internal hidden associated object)λ₯Ό 가짐
  • 이 ν™˜κ²½ κ°μ²΄λŠ” 2λΆ€λΆ„μœΌλ‘œ ꡬ성됨
  1. ν™˜κ²½ λ ˆμ½”λ“œ(Environment Record) : λͺ¨λ“  μ§€μ—­λ³€μˆ˜λ₯Ό ν”„λ‘œνΌν‹°λ‘œ μ €μž₯ν•˜κ³  μžˆλŠ” 객체, this와 같은 기타정보도 여기에 μ €μž₯
  2. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½(Outer Lexical Environment)에 λŒ€ν•œ μ°Έμ‘° : μ™ΈλΆ€μ½”λ“œμ™€ 연관됨

β€˜λ³€μˆ˜β€™λŠ” 특수 λ‚΄λΆ€ 객체인 ν™˜κ²½λ ˆμ½”λ“œμ˜ ν”„λ‘œνΌν‹°μΌ λΏμž„
β€˜λ³€μˆ˜λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜, λ³€κ²½ν•˜λŠ”κ²ƒβ€™μ€ β€˜ν™˜κ²½λ ˆμ½”λ“œμ˜ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜ 변경함’을 μ˜λ―Έν•¨

μ˜ˆμ‹œ:

// 이 두 μ€„μ§œλ¦¬ μ½”λ“œμ—λŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•¨
let phrase = "hello"; // Lexcial Environment [ phrase: "hello" ] ->(outer)-> null
alert(phrase);
  • μ΄λ ‡κ²Œ 슀크립트 전체에 κ΄€λ ¨λœ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄λΌ 뢀름(global Lexical Environment)
  • μœ„ μ½”λ“œμ—μ„œ [ ] λŠ” λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” ν™˜κ²½ λ ˆμ½”λ“œλ₯Ό λ‚˜νƒ€λƒ„
  • 또 μ „μ—­ λ ‰μ‹œμ»¬μ€ μ™ΈλΆ€ μ°Έμ‘° (outer)κ°€ μ—†κΈ° λ•Œλ¬Έμ— nullλ₯Ό 가리킴

μ˜ˆμ‹œ:

// execution start : Lexcial Environment [ phrase: <uninitialized> ] ->(outer)-> null
let phrase; // Lexcial Environment [ phrase: undefined ]
phrase = "Hello"; // Lexcial Environment [ phrase: "Hello" ]
phrase = "Bye"; // Lexcial Environment [ phrase: "Bye" ]
  1. μŠ€ν¬λ¦½νŠΈκ°€ μ‹œμž‘λ˜λ©΄ 슀크립트 내에선 μ„ μ–Έν•œ λ³€μˆ˜ 객체가 λ ‰μ‹œμ»¬ ν™˜κ²½μ— 올라감(pre-populated)

    • μ΄λ•Œ λ³€μˆ˜μ˜ μƒνƒœλŠ” 특수 λ‚΄λΆ€ μƒνƒœ(special internal state)인 β€œuninitialized”가 됨
    • js λŠ” uninitialized μƒνƒœμΈ λ³€μˆ˜λ₯Ό μΈμ§€ν•˜κΈ΄ ν•˜μ§€λ§Œ,, let을 λ§Œλ‚˜κΈ° μ „κΉŒμ§„ μ°Έμ‘° λΆˆκ°€λŠ₯
  2. let phrase λ₯Ό λ§Œλ‚¬μ§€λ§Œ 아직 값은 할당이 μ•ˆλ˜μ—ˆκΈ°μ— ν”„λ‘œνΌν‹° 값은 undefined 이고 phraseλŠ” μ΄λ•ŒλΆ€ν„° μ‚¬μš©ν•  수 있음
  3. phrase에 값이 할당됨
  4. phrase에 값이 할당됨

μš”μ•½ν•˜μžλ©΄,,

  • λ³€μˆ˜λŠ” 특수 λ‚΄λΆ€ 객체인 ν™˜κ²½ λ ˆμ½”λ“œμ˜ ν”„λ‘œνΌν‹°μž„
  • ν™˜κ²½ λ ˆμ½”λ“œλŠ” ν˜„μž¬ 싀행쀑인 ν•¨μˆ˜μ™€ μ½”λ“œλΈ”λ‘, μŠ€ν¬λ¦½νŠΈμ™€ μ—°κ΄€λ˜μ–΄ 있음
  • λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜λ©΄ ν™˜κ²½ λ ˆμ½”λ“œμ˜ ν”„λ‘œνΌν‹°κ°€ 변경됨

2단계-ν•¨μˆ˜ μ„ μ–Έλ¬Έ

ν•¨μˆ˜λŠ” λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ κ°’μž„,,

  • κ·ΈλŸ¬λ‚˜,,,, ν•¨μˆ˜ μ„ μ–Έλ¬Έ(Function declaration)으둜 μ„ μ–Έν•œ ν•¨μˆ˜λŠ” 일반 λ³€μˆ˜μ™€ λ‹€λ₯΄κ²Œ λ°”λ‘œ μ΄ˆκΈ°ν™”κ°€ λœλ‹€λŠ” μ μ—μ„œ 차이가 있음(κ°œλΉ‘μΉ˜λ„Ή)
  • κ·ΈλŸ¬λ‹ˆκΉŒ 이걸둜 λ§Œλ“€λ©΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ λ§Œλ“€μ–΄μ§€λŠ 즉!μ‹œ! μ‚¬μš©ν•  수 있음
  • ν•˜λ“±ν•œ λ³€μˆ˜λŠ” let을 λ§Œλ‚˜μ•Όμ§€λ§Œ μ‚¬μš©ν• μˆ˜ μžˆμ§€λ§Œ γ…Ž
  • κ·Έλž˜μ„œ μ„ μ–Έλ˜κΈ°μ „μ—λ„ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ”κ²Œ λ°”λ‘œ μ΄λ•Œλ¬Έμž„

μ˜ˆμ‹œ:

//execution start : Lexcial Environment [
//                            phrase: <uninitialized>,
//                            say: function
//                          ] ->(outer)->null

let phrase = "Hello";

function say(name) {
  alert($`{name}`);
}

이런 λ™μž‘ 방식은 ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜μ—λ§Œ 적용됨
λ”°λΌμ„œ let say = function(name)... 와 같이 λ³€μˆ˜μ— ν• λ‹Ήλœ ν•¨μˆ˜ ν‘œν˜„μ‹(function expression)은 ν•΄λ‹Ήν•˜μ§€ μ•ŠμŒ

3단계-내뢀와 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½

  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μ‹€ν–‰ν•˜λ©΄ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ν™˜κ²½μ΄ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§€μž–μŒ?
  • 이 ν™˜κ²½μ—λŠ” ν˜ΈμΆœμ‹œ λ„˜κ²¨λ°›μ€ λ§€κ°œλ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ μ§€μ—­λ³€μˆ˜κ°€ μ €μž₯됨!(μ€‘μš”)

  • say("μ„±μ€€")을 ν˜ΈμΆœν•˜λ©΄ μ–΄λ–€ λ³€ν™”κ°€ μƒκΈΈκΉŒ?

μ˜ˆμ‹œ:

let phrase = "Hello";

//      Lexcial Environment of the call [
//                            name: "μ„±μ€€",
//                          ]  ->(outer)-> [
//                                            say: function
//                                            phraseL : "Hello"
//                                          ] ->(outer)-> null

function say(name) {
  alert(`${phrase}, ${name}`); // 이게 싀행될 λ•Œ κ°€ μœ„μ˜ 주석
}

say("μ„±μ€€"); // Hello, μ„±μ€€
  • ν•¨μˆ˜κ°€ ν˜ΈμΆœμ€‘μΈ λ™μ•ˆμ—” ν˜ΈμΆœμ€‘μΈ ν•¨μˆ˜λ₯Ό μœ„ν•œ λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Ό 이게 κ°€λ¦¬ν‚€λŠ” μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ κ°€μ§€κ²Œ 됨

    • μ˜ˆμ‹œμ˜ λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ ν˜„μž¬ 싀행쀑인 say에 상응
    • 이 ν™˜κ²½μ—” ν•¨μˆ˜μ˜ 인자인 name으둜 λΆ€ν„° μœ λž˜ν•œ ν”„λ‘œνΌν‹° ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•¨
    • say("μ„±μ€€")을 ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ—, name 값은 "μ„±μ€€"이 됨
    • 이 μ˜ˆμ‹œμ— μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½μž„
    • μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ phrase와 ν•¨μˆ˜ sayλ₯Ό ν”„λ‘œνΌν‹°λ‘œ 가짐
  • λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ™ΈλΆ€λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 가짐!!!

  1. μ½”λ“œμ—μ„œ λ³€μˆ˜λ₯Ό μ ‘κ·Όν•  λ•Œ, λ¨Όμ € λ‚΄λΆ€ λ ‰μ‹œμ»¬μ—μ„œ 찾음
  2. μ–΄? λͺ»μ°Ύμ•˜λ„€? 이 ν™˜κ²½μ΄ μ°Έμ‘°ν•˜λŠ” μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ ν™•μž₯ν•΄μ„œ 찾음
  3. μ–΄? λͺ»μ°Ύμ•˜λ„€? …recursive?
  4. μ–Έμ œκΉŒμ§€? κ²€μƒ‰λ²”μœ„κ°€ μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ ν™•μž₯될 λ•Œ κΉŒμ§€!!
  • λ§Œμ•½ strict λͺ¨λ“œ(μ—„κ²©ν•œ λͺ¨λ“œ)에선 μ „μ—­μ—μ„œλ„ λ³€μˆ˜λ₯Ό λͺ»μ°Ύμ•˜λ‹€? error λ„μ›Œμ€Œ
  • ν•˜μ§€λ§Œ λΉ„ 엄격λͺ¨λ“œμ—μ„œλŠ” μ •μ˜λ˜μ§€ μ•Šμ€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬λŒ€μ‹ ,,,
  • μƒˆλ‘œμš΄ μ „μ—­ λ³€μˆ˜κ°€ λ§Œλ“€μ–΄μ§€λŠ”λ° 이건 ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κ·Έλ ‡λ‹€λ„€μ˜

4단계-ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

거의 λλ‚˜κ°€μš©,,

λ‹€μ‹œ 맨처음 makeCounterμ˜ˆμ‹œλ₯Ό 보면?

μ˜ˆμ‹œ:

function makeCounter() {
  let count = 0; // μ—¬κΈ°λΆ€λΆ„μ—μ„œ λ³ΌκΊΌμ–‘

  return function () {
    return count++; // λ‘λ²ˆμ§Έ 뢀뢄은 μ—¬κΈ°μ–‘
  };
}

let counter = makeCounter();

alert(counter()); // 0
alert(counter()); // 1
alert(counter()); // 2
  • makeCounterλ₯Ό ν˜ΈμΆœν•˜λ©΄ ν˜ΈμΆœν•  λ•Œ λ§ˆλ‹€ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ ν™˜κ²½ 객체가 λ§Œλ“€μ–΄μ§€κ³ (이젠 μ•Œκ² μ§€?) 여기에 makeCounterκ°€ μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ λ³€μˆ˜λ“€μ΄ μ €μž₯λœλ‹€κ΅¬μš”]
  • κ·Έ 래 μ„œ say("μ„±μ€€") μ˜ˆμ‹œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ makeCounterκ°€ μ‹€ν–‰λ˜λ©΄ 2개의 λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ λ§Œλ“€μ–΄μ§

λ©€κΉŒμš”??? 정닡은…?
λ¨Έ λ‚΄λΆ€ ν•˜λ‚˜,, μ „μ—­ ν•˜λ‚˜ λ§Œλ“€μ–΄μ§€κ² μ°Œ λ¨Έ

근데 차이점이 μžˆμŒβ€¦. 그게 머냐면,,

  • makeCounter()κ°€ μ‹€ν–‰λ˜λŠ” 도쀑에 λ³Έλ¬Έ (return count++)이 ν•œμ€„μ§œλ¦¬μΈ 쀑첩 ν•¨μˆ˜κ°€ λ§Œλ“€μ–΄μ§„λ‹€λŠ”μ !!
  • κ·ΈλŸ¬λ‹ˆκΉŒ ν˜„μž¬λŠ” 쀑첩 ν•¨μˆ˜κ°€ μƒμ„±λ˜κΈ°λ§Œ ν•˜κ³  싀행은 λ˜μ§€ μ•ŠλŠ” μƒνƒœμž„

또 μ—¬κΈ°μ„œ μ€‘μš”ν•œκ²Œ ν•˜λ‚˜κ°€ 더 μžˆλŠ”λ°β€¦

  • λͺ¨λ“  ν•¨μˆ˜λŠ” ν•¨μˆ˜κ°€ μƒμ„±λœ 곳의 λ ‰μ‹œμ»¬ ν™˜κ²½μ„ 기얡함!!!!
  • ν•¨μˆ˜λŠ” [[Environment]]라 λΆˆλ¦¬λŠ” μˆ¨κΉ€ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ”λ°,, 여기에 ν•¨μˆ˜κ°€ λ§Œλ“€μ–΄μ§„ 곳의 λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°κ°€ μ €μž₯됨

λ”°λΌμ„œ λ‘λ²ˆμ§Έ 뢀뢄을 보면

  • counter.[[Environment]]μ—” {count:0}이 μžˆλŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°κ°€ μ €μž₯λœλ‹€κ΅¬μš”
  • 호좜μž₯μ†Œμ™€ 상관없이 κΈ°μ–΅ν•˜λŠ”κ±΄? μ €κ±°λ•Œλ¬Έμ΄λΌκ΅¬μš©
  • μ–˜λŠ” μƒμ„±λ λ•Œ λ”± ν•œλ²ˆ μ„€μ •λ˜κ³ , μ˜μ›,,,히 λ³€ν•˜μ§€ μ•Šμ•„μš©

  • κ·Έλž˜μ„œ counter()λ₯Ό ν˜ΈμΆœν•˜λ©΄ 각 ν˜ΈμΆœλ§ˆλ‹€ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ 생성됨
  • 이후 μ•Œμ•„μ„œ 잘 μ°Έμ‘°ν•˜κ² μ§€?

κ·Έλ¦¬κ³ λ‚˜μ„œ μ‹€ν–‰ 흐름이 μ€‘μ²©ν•¨μˆ˜μ˜ 본문으둜 λ„˜μ–΄μ˜€λ©΄,,

  • count λ³€μˆ˜κ°€ ν•„μš”ν•œλ°,
    1. λ¨Όμ € 자체 λ ‰μ‹œμ»¬μ—μ„œ λ³€μˆ˜λ₯Ό 찾음
    2. κ·ΈλŸ¬λ‚˜ 읡λͺ… 쀑첩 ν•¨μˆ˜μ—” μ§€μ—­λ³€μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— 이 λ ‰μ‹œμ»¬μ€ λΉ„μ–΄μžˆλŠ” 상황
    3. 이제 counter()의 λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ μ°Έμ‘°ν•˜λŠ” μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ—μ„œ countλ₯Ό 찾음
    4. μ–΄λ¨Έ 찾아버렸넀?
    5. 이후 count++κ°€ μ‹€ν–‰λ˜λ©΄μ„œ count값이 1 μ¦κ°€ν•΄μ•Όν•˜λŠ”λ°,,,,
    6. λ³€μˆ«κ°’ 갱신은 μ–΄λ””μ„œ μΌμ–΄λ‚œλ‹€? λ³€μˆ˜κ°€ μ €μž₯된 λ ‰μ‹œμ»¬μ—μ„œ μΌμ–΄λ‚œλ‹€!

04 κ·Έλž˜μ„œ ν΄λ‘œμ €λŠ” μ–΄λ””κ°€κ³  μ΄κ²ƒλ§Œ μ„€λͺ…함?

ν΄λ‘œμ €λŠ” μ™ΈλΆ€λ³€μˆ˜λ₯Ό κΈ°μ–΅ν•˜κ³  이 μ™ΈλΆ€λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•¨
ν•¨μˆ˜μ™€ λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ μ‘°ν•©

  • λͺ‡λͺ‡ μ–Έμ–΄μ—μ„œλŠ” ν΄λ‘œμ € κ΅¬ν˜„μ΄ λΆˆκ°€λŠ₯ν•˜κ±°λ‚˜,,, νŠΉμˆ˜ν•œ λ°©μ‹μœΌλ‘œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ•Όν•¨
  • ν•˜μ§€λ§Œ jsμ—μ„œλŠ” λͺ¨λ“  ν•¨μˆ˜κ°€ μžμ—°μŠ€λŸ½κ²Œ ν΄λ‘œμ €κ°€ 됨
  • μ˜ˆμ™Έκ°€ μžˆκΈ΄ν•œλ°,,, new Function 문법 μ—μ„œ 닀루면 될듯,,?
  • μ•„λ¬΄νŠΌ js의 κ³ μœ ν•œ κ°œλ…μ΄ μ•„λ‹Œ μ—¬λŸ¬ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ λ°œκ²¬λ˜λŠ” νŠΉμ„±μ΄λΌκ΅¬

κ·Έλž˜μ„œ μ™œμ“°λŠ”λ°?

  • 데이터λ₯Ό 보쑴할 수 μžˆλ‹€κ³ μš”^^
  • 정보 μ ‘κ·Όμ œν•œμ΄ κ°€λŠ₯ν•˜κ²Ÿμ£ ? (μΊ‘μŠν™”)
  • λͺ¨λ“ˆν™”에도 μœ λ¦¬ν•˜κ² μ£ ?

κ·Έλž˜μ„œ λ‹€μ‹œ 핡심

μŠ€μ½”ν”„λ₯Ό μ΄μš©ν•΄μ„œ λ³€μˆ˜μ˜ μ ‘κ·Ό λ²”μœ„λ₯Ό λ‹«λŠ”(νŒ¨μ‡„)것에 있음
ν•¨μˆ˜μ˜ ν˜ΈμΆœλ˜λŠ” ν™˜κ²½κ³ΌλŠ” λ³„κ°œλ‘œ, 기쑴에 μ„ μ–Έλ˜μ–΄μžˆλ˜ ν™˜κ²½(μ–΄νœ˜μ  ν™˜κ²½)을 κΈ°μ€€μœΌλ‘œ λ³€μˆ˜λ₯Ό μ‘°νšŒν•¨

ν΄λ‘œμ €λŠ” νŠΉμ • μƒν™©μ—μ„œ λ°œμƒν•˜λŠ” β€˜ν˜„μƒβ€™μ΄κ³ , ν•¨μˆ˜λŠ” 이 ν˜„μƒμ΄ λ‚˜νƒ€λ‚˜κΈ° μœ„ν•œ β€˜μ‘°κ±΄β€™μ— 해당됨

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°