Git Product home page Git Product logo

js-interview-question's Introduction

JavaScript ์ธํ„ฐ๋ทฐ ๋ฌธ์ œ & ๋‹ต์•ˆ

ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ์ธํ„ฐ๋ทฐ ๋ฌธ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค.
https://dev.to/macmacky/70-javascript-interview-questions-5gfi

ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ๋””์ž์ธ ๋ฐ ๋ ˆ์ด์•„์›ƒ์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
https://github.com/sudheerj/reactjs-interview-questions


๋ฌธ์ œ ํ…Œ์ด๋ธ”

No. ๋ฌธ์ œ
1 undefined์™€ null์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
2 ์—ฐ์‚ฐ์ž &&๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
3 ์—ฐ์‚ฐ์ž ||๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
4 + ๋˜๋Š” ๋‹จํ•ญ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ผ๊นŒ?
5 DOM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
6 event Propagation์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
7 event Bubbling์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
8 event Capturing์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
9 event.preventDefault()์™€ event.stopPropagation() ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?
10 event.preventDefault()ํ•จ์ˆ˜๊ฐ€ ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
11 obj.someprop.x์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š”?
12 event.target์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
13 event.currentTarget์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
14 ==์™€ ===์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
15 2๊ฐœ์˜ ์†์„ฑ์ด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋•Œ ์™œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‚˜์š”?
16 !!์—ฐ์‚ฐ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
17 ํ•œ์ค„์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€?
18 ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
19 ์Šค์ฝ”ํ”„(Scope)๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
20 ํด๋กœ์ €(Closure)๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
21 Javascript์—์„œ false๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ๋“ค์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
22 ๊ฐ’์ด ๊ฑฐ์ง“์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€?
23 'use strict'๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ
24 Javascript์—์„œ์˜ 'this'๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต์•ˆ

  1. undefined์™€ null์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    undefined์™€ null์€ JavaScript์˜ 7๊ฐœ์˜ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž…์ด๋‹ค.

    undefined์™€ null์˜ ๊ฐ’์€ false๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ( !!value ) ๋“ฑ์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    console.log(!!null); //logs false
    console.log(!!undefined); //logs false

    undefined๋Š” ํŠน์ • ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค. ๋ณดํ†ต ์„ ์–ธ๋งŒ ํ•˜๊ณ  ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— undefined ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ๋œ๋‹ค.

    let test;
    const doNothing = () => {};
    
    console.log(test); //logs undefined
    console.log(doNothing()); //logs undefined

    null์€ ์ผ์ข…์˜ '๊ฐ’์ด ์—†๋Š” ๊ฐ’'์ด๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜๋œ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ fs.readFile ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด null ๊ฐ’์„ ์–ป๋Š”๋‹ค.

    var test = null;
    console.log(test);
    
    fs.readFile('path/to/file', (e,data) => {
      console.log(e); //it logs null when no error occurred
      console.log(data);
    });

    โฌ† Back to Top

  2. ์—ฐ์‚ฐ์ž &&๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์˜ AND ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋Š” ๋ณดํ†ต Boolean(๋…ผ๋ฆฌ์ ) ๊ฐ’๊ณผ ํ•จ๊ป˜ ์“ฐ์ด๋ฉฐ, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ํ‘œํ˜„์‹์ด ๊ฑฐ์ง“์ด๋ฉด ์ฒซ๋ฒˆ์งธ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ฐธ์ด๋ฉด ๋‘๋ฒˆ์งธ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    conMobile์˜ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋•Œ๋ฌธ์— release()ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. if ๋Œ€์‹  && ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    // if๋ฌธ ์‚ฌ์šฉ
    if (conMobile) {
      conMobile.release();
    }
    
    // && ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
    conMobile && conMobile.release();

    โฌ† Back to Top

  3. ์—ฐ์‚ฐ์ž ||๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์˜ OR ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋Š” ๋ณดํ†ต Boolean(๋…ผ๋ฆฌ์ ) ๊ฐ’๊ณผ ํ•จ๊ป˜ ์“ฐ์ด๋ฉฐ, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ํ‘œํ˜„์‹์ด ๊ฑฐ์ง“์ด๋ฉด ๋‘๋ฒˆ์งธ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ฐธ์ด๋ฉด ์ฒซ๋ฒˆ์งธ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    null์€ false๊ฐ’์„ ๊ฐ€์ง€๊ณ  1์€ true๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ๋•Œ๋ฌธ์— 1์ด ๋จผ์ € ๋ฐ˜ํ™˜๋˜๊ณ , undefined์™€ ๋‹ค์‹œ || ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. undefined๋Š” false๊ฐ’์„ ๊ฐ€์ง€๊ธฐ์— true๊ฐ’์ธ 1์ด ๋ฆฌํ„ด๋œ๋‹ค.

    console.log(null || 1 || undefined); //logs 1

    ์ธ์ž name์— ์–ด๋–ค ๊ฐ’๋„ ์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— name์€ undefined์ด๋ฉฐ, undefined๋Š” false ์ด๋ฏ€๋กœ ||์—ฐ์‚ฐ์ž์— ์˜ํ•ด 'Mark'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    function logName(name) {
      var n = name || "Mark";
      console.log(n);
    }
    
    logName(); //logs "Mark"

    โฌ† Back to Top

  4. ๋‹จํ•ญ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ผ๊นŒ?

    MDN Documentation์— ์˜ํ•˜๋ฉด +๋ฅผ ํ†ตํ•œ ๋ณ€ํ™˜์€ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ ์ˆซ์ž์ธ ๊ฒฝ์šฐ, ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ์–ด๋–คํ•œ ๋™์ž‘๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    console.log(+'3'); // logs 3

    โฌ† Back to Top

  5. DOM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    DOM ์€ Document Object Model์„ ์˜๋ฏธํ•˜๋ฉฐ HTML ๋ฐ XML ๋ฌธ์„œ๋ฅผ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ( API ) ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ ์ฝ์„ ๋•Œ(๋˜๋Š” ํŒŒ์‹ฑ) ํฐ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋•Œ HTML ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ์ด ๊ฐœ์ฒด๊ฐ€ DOM์ด๋‹ค.

    HTML ๋ฌธ์„œ์—์„œ ๋ชจ๋ธ๋ง ๋œ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๋ฐ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ€์ผ ๋“ฑ์— ๋Œ€ํ•œ ์กฐ์ž‘์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document Object Model</title>
      </head>
    
      <body>
        <div>
          <p>
            <span></span>
          </p>
          <label></label>
          <input>
        </div>
      </body>
    </html>

    ์ด๋ฏธ์ง€ ์ด๋ฆ„

โฌ† Back to Top

  1. event Propagation์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    ์ด๋ฒคํŠธ ์ „ํŒŒ(event propagation)๋ž€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํƒœ๊ทธ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ํ•˜์œ„ ํƒœ๊ทธ์—๊ฒŒ๋กœ ์ „ํŒŒ๋˜๋Š” ํ˜„์ƒ์„ ๋œปํ•œ๋‹ค. ์ด๋ฒคํŠธ ์ „ํŒŒ์—๋Š” ์„ธ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    1. ์บก์ฒ˜(Capturing) ๋‹จ๊ณ„ - ์ด๋ฒคํŠธ๊ฐ€ window๋กœ๋ถ€ํ„ฐ ํƒ€๊ฒŸ ์š”์†Œ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋Š” ํ˜„์ƒ
    2. ๋ชฉํ‘œ(target) ๋‹จ๊ณ„ - ์ด๋ฒคํŠธ๊ฐ€ ๋ชฉํ‘œ ์š”์†Œ์— ๋„์ฐฉํ•˜๋Š” ๊ฒƒ
    3. ๋ฒ„๋ธ”๋ง(bubbling) ๋‹จ๊ณ„ - ์ด๋ฒคํŠธ๊ฐ€ ๋ชฉํ‘œ์š”์†Œ๋กœ๋ถ€ํ„ฐ window๊นŒ์ง€ ํผ์ ธ๊ฐ€๋Š” ํ˜„์ƒ

    โฌ† Back to Top

  2. event Bubbling์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    ์ด๋ฒคํŠธ๊ฐ€ DOM ์š”์†Œ์—์„œ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฒคํŠธ๊ฐ€ ํƒ€๊ฒŸ ์š”์†Œ๋กœ๋ถ€ํ„ฐ window ๊นŒ์ง€ ํผ์ ธ๋‚˜๊ฐ€๋Š” ํ˜„์ƒ์ด๋‹ค.

    ์ฝ”๋“œ์—์„œ child ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ์‹œ, child -> parent -> grandparent ์ˆœ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค.

    <div class="grandparent">
      <div class="parent">
        <div class="child">1</div>
      </div>
    </div>

    โฌ† Back to Top

  3. event Capturing์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

    ์ด๋ฒคํŠธ๊ฐ€ DOM ์š”์†Œ์—์„œ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด ์ด๋ฒคํŠธ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. Capturing Phase์—์„œ๋Š”, ์ด๋ฒคํŠธ๊ฐ€ window๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๊นŒ์ง€ ์ „ํŒŒ๋œ๋‹ค.

    ์œ„์™€ ๊ฐ™์€ ์˜ˆ์ œ๋กœ child์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ์‹œ, grandparent -> parent -> child ์ˆœ์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    <div class="grandparent">
      <div class="parent">
        <div class="child">1</div>
      </div>
    </div>

    โฌ† Back to Top

  4. event.preventDefault()์™€ event.stopPropagation() ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

    preventDefault()ํ•จ์ˆ˜๋Š” ์š”์†Œ์˜ ๊ธฐ๋ณธ๋™์ž‘์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด form ํƒœ๊ทธ์˜ ์ด๋ฒคํŠธ์—์„œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, submit์ด๋ผ๋Š” form ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ๋™์ž‘์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    stopPropagation()ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๋ธ”๋ง ๋˜๋Š” ์บก์ฒ˜๋ง ๋‹จ๊ณ„ ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

    โฌ† Back to Top

  5. event.preventDefault()ํ•จ์ˆ˜๊ฐ€ ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

    event.defaultPrevented()๋ผ๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋Š”์ง€๋ฅผ ์ด ํ•จ์ˆ˜์˜ bool ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    โฌ† Back to Top

  6. obj.someprop.x์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š”?

    const obj = {};
    console.log(obj.someprop.x);

    obj ๊ฐ์ฒด์˜ someprop์ด๋ผ๋Š” ์†์„ฑ์˜ value๋Š” undefined์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋”ฐ๋กœ ๊ฐ์ฒด์— ์„ ์–ธํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์„ ์–ธํ•˜์ง€ ์•Š์€ ์†์„ฑ์ด๋‚˜ ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, javascript๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ์•„๋‹Œ undefined๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

    undefined์ธ someprop์—๊ฒŒ x๋ผ๋Š” ์†์„ฑ์˜ ํ˜ธ์ถœ์„ ์š”๊ตฌํ•œ๋‹ค. ๋‹น์—ฐํžˆ undefined๋Š” ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

    โฌ† Back to Top

  7. event.target์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    e.target์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋œ ํƒœ๊ทธ ๊ทธ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด div์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, e.target์€ ๊ทธ div๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

    ์—ฌ๊ธฐ์„œ three๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง„ div์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, target์€ threeํด๋ž˜์Šค์˜ div๊ฐ€ ๋œ๋‹ค.

    <div class="one">
      <div class="two">
        <div class="three" onClick="">
        </div>
      </div>
    </div>

    โฌ† Back to Top

  8. event.currentTarget์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    e.currentTarget ์€ ๋™์ผํ•˜๊ฒŒ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํƒœ๊ทธ๋ฅผ ์˜๋ฏธํ•˜๋‚˜, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํƒœ๊ทธ์˜ ์ตœ์ƒ์œ„ (๋ถ€๋ชจ) ํƒœ๊ทธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    three์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ, currentTarget์€ one์ด ๋œ๋‹ค.

    <div class="one">
      <div class="two">
        <div class="three" onClick="">
        </div>
      </div>
    </div>

    โฌ† Back to Top

  9. ==์™€ ===์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ==๋Š” ์–•์€ ๋น„๊ต๋กœ์จ, ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•˜์—ฌ ๋น„๊ตํ•œ๋‹ค. ===๋Š” ํ˜•๋ณ€ํ™˜์—†์ด ๊ทธ๋Œ€๋กœ ํƒ€์ž…๊ณผ ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

    == ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ, 254๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ true๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.

    254 == '254'      // return true
    'true' == true    // return false
    true == 2         // return false
    
    254 === '254'     // return false

    โฌ† Back to Top

  10. 2๊ฐœ์˜ ์†์„ฑ์ด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋•Œ ์™œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‚˜์š”?

    let a = { a: 1 };
    let b = { a: 1 };
    let c = a;
    
    console.log(a === b); // logs false even though they have the same property
    console.log(a === c); // logs true hmm

    ๊ฐ์ฒด๋Š” ์ฐธ์กฐ์— ์˜ํ•ด ํ• ๋‹น๋˜๊ณ  ๋ณต์‚ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๋ถ€ ์†์„ฑ๊นŒ์ง€ ๋™์ผํ•ด๋„ ์„ ์–ธ์„ ๋”ฐ๋กœ ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐธ์กฐํ•˜๊ฒŒ๋œ๋‹ค. ์ฐธ์กฐ๋ž€, ๋ฉ”๋ชจ๋ฆฌ์—์„œ์˜ ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๋•Œ๋ฌธ์— a์™€ b๋Š” ๊ฐ™์ง€ ์•Š์œผ๋ฉฐ, c์˜ ๊ฒฝ์šฐ a์˜ ์ฐธ์กฐ๋ฅผ ๋˜‘๊ฐ™์ด ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— true๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.

    โฌ† Back to Top

  11. !!์—ฐ์‚ฐ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    !!์—ฐ์‚ฐ์ž๋Š”, ์˜ค๋ฅธ์ชฝ์˜ ๊ฐ’์„ bool ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ 

    console.log(!!null); //logs false
    console.log(!!undefined); //logs false
    console.log(!!''); //logs false
    console.log(!!0); //logs false
    console.log(!!NaN); //logs false
    console.log(!!' '); //logs true
    console.log(!!{}); //logs true
    console.log(!![]); //logs true
    console.log(!!1); //logs true
    console.log(!![].length); //logs false

    โฌ† Back to Top

  12. ํ•œ์ค„์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

    ,๋ฅผ ํ†ตํ•ด ํ•œ์ค„์— ์—ฌ๋Ÿฌ ํ‘œํ˜„์‹์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    let x = 5;
    
    x = (x++ , x = addFive(x), x *= 2, x -= 5, x += 10);
    
    function addFive(num) {
      return num + 5;
    }

    ์™ผ์ชฝ -> ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ง„ํ–‰๋˜๋ฏ€๋กœ, x++ ์„ ๊ฐ€์žฅ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

    1. x++๋กœ ์ธํ•ด 6 ๋ฐ˜ํ™˜
    2. addFive(6) ์ˆ˜ํ–‰ํ•˜์—ฌ 11 ๋ฐ˜ํ™˜
    3. x *= 2 ์ˆ˜ํ–‰ํ•˜์—ฌ 22 ๋ฐ˜ํ™˜
    4. x -= 5 ์ˆ˜ํ–‰ํ•˜์—ฌ 17 ๋ฐ˜ํ™˜
    5. x += 10 ์ˆ˜ํ–‰ํ•˜์—ฌ 27 ๋ฐ˜ํ™˜

    โฌ† Back to Top

  13. ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜์˜ ์„ ์–ธ๋ถ€๊ฐ€ ์ฝ”๋“œ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    zero๊ฐ€ ์•„๋ž˜ ์„ ์–ธ๋˜์–ด์žˆ์Œ์—๋„ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” zero๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ์ตœ์ƒ๋‹จ์œผ๋กœ ์„ ์–ธ๋ถ€๊ฐ€ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    console.log(zero); // undefined  ( ?? Why ?? )
    var zero = 'zero';
    var zero;
    console.log(zero)
    
    zero = 'zero';

    ํ•จ์ˆ˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ ์–ธ๋ถ€๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

    sayWow();
    
    function sayWow() {
      console.log('wow');
    }

    ํ•˜์ง€๋งŒ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ์„ ๊ฒฝ์šฐ, ํ˜ธ์ด์ŠคํŒ…ํ•˜์—ฌ๋„ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”๋ฐ, ์ด๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ ์„ ์–ธ๋ถ€๋งŒ ์˜ฌ๋ผ๊ฐ€๋ฒ„๋ฆด ์‹œ undefined ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ๋˜๋ฉฐ, undefined์˜ ํ•จ์ˆ˜ํ˜ธ์ถœ์€ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    var sayWow;
    sayWow();
    sayWow = function () {
      console.log('wow');
    }
    var sayWow;
    sayWow();
    sayWow = function () {
      console.log('wow');
    }

    โฌ† Back to Top

  14. ์Šค์ฝ”ํ”„(Scope)๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    Javascript์—์„œ์˜ ์Šค์ฝ”ํ”„๋ž€ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์œ ํšจํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ์˜์—ญ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. Javascript์—๋Š” 3๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ฒ”์œ„๊ฐ€ ์žˆ๋‹ค.

    ์ „์—ญ ์Šค์ฝ”ํ”„ - ์ „์—ญ Space์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜. ์ „์—ญ ๋ฒ”์œ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์–ด๋–ค ๊ณณ์—์„œ๋„ ์ ‘๊ทผ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    //global namespace
    var g = "global";
    
    function globalFunc(){
      console.log('test');
    }  

    ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ - ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

    function myFavoriteFunc(a) {
      var b = 3;
       return b;
    }
    
    console.log(a); // ReferenceError ๋ฆฌํ„ด. a is not undefined
    console.log(b); // Error ๋ฆฌํ„ด 

    ๋ธ”๋ก ์Šค์ฝ”ํ”„ - {} ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜. ๋ณดํ†ต let, const๋กœ ์ด๋ฃจ์–ด์ง„ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น {} ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    function testBlock(){
      if(true) {
        let z = 5;
      }
      return z; 
    }
    
    testBlock(); // ReferenceError ๋ฆฌํ„ด "z" is not defined

    ์Šค์ฝ”ํ”„๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ทœ์น™์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ํ˜„์žฌ ์Šค์ฝ”ํ”„ ์•ˆ์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์™ธ๋ถ€ ์Šค์ฝ”ํ”„์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‹ค์‹œ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์—ญ๋ฒ”์œ„์— ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋งŒ์•ฝ ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค๋ฉด ํƒ์ƒ‰์„ ์ค‘์ง€ํ•˜๊ณ  ์ „์—ญ์Šค์ฝ”ํ”„๊นŒ์ง€ ์ง„ํ–‰ํ•ด์„œ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์Šค์ฝ”ํ”„ ์ฒด์ธ(Scope Chain)์ด๋ผ๊ณ  ํ•œ๋‹ค.

    โฌ† Back to Top

  15. ํด๋กœ์ €(Closure)๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ํด๋กœ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ ์ƒ์„ฑ๋œ ์Šค์ฝ”ํ”„๋กœ์จ, ์„ ์–ธ ๋‹น์‹œ์˜ ํ•จ์ˆ˜๊ฐ€ ์Šค์ฝ”ํ”„ ์ฒด์ธ์˜ ๋„์›€์œผ๋กœ ์ „์—ญ ๋ฒ”์œ„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ํ•จ์ˆ˜์˜ ๋Œ€ํ•œ ๋ณ€์ˆ˜ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•จ์ˆ˜ ๋“ฑ์˜ ์ฐธ์กฐ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ž์œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์— ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ํด๋กœ์ €๋‹ค. ์—ฌ๊ธฐ์„œ ์ž์œ ๋ณ€์ˆ˜๋ž€ ํด๋กœ์ € ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ƒ์„ฑํ•œ ๋ณ€์ˆ˜๋„ ์•„๋‹ˆ๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์•„๋‹Œ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํด๋กœ์ €๋ฅผ ๋งํ•  ๋•Œ๋Š” ์Šค์ฝ”ํ”„/์ปจํ…์ŠคํŠธ/์ž์œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ™์ด ์„ค๋ช…ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

    ์†Œ์Šค์ฝ”๋“œ์—์„œ name์€ ํด๋กœ์ € ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ์•„๋‹ˆ๊ณ , ํด๋กœ์ € ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•œ ๋ณ€์ˆ˜๋„ ์•„๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ž์œ ๋ณ€์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

    var makeClosure = function() {
      var name = 'test';
      return function () {
        console.log(name);
      }
    };
    var closure = makeClosure(); // function () { console.log(name); }
    closure(); // 'test';

    ์ด๊ฒƒ์„ ์ปจํ…์ŠคํŠธ๋กœ ์ฐธ๊ณ ํ•˜๋ฉด ์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์™€ ๊ฐ™์ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. closure = makeClosure()๋กœ ์ธํ•˜์—ฌ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋Š” ์ „์—ญ์ปจํ…์ŠคํŠธ์™€ makeClosureํ•จ์ˆ˜์˜ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ์Šค์ฝ”ํ”„์ฒด์ธ์„ ํ†ตํ•ด makeClosure์— ์žˆ๋Š” ๋ณ€์ˆ˜ (์ž์œ ๋ณ€์ˆ˜) name์˜ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    "์ „์—ญ ์ปจํ…์ŠคํŠธ": {
      scopeChain: ['์ „์—ญ ๋ณ€์ˆ˜๊ฐ์ฒด'],
    }
    "makeClosure ์ปจํ…์ŠคํŠธ": {
      scopeChain: ['makeClosure ๋ณ€์ˆ˜๊ฐ์ฒด', '์ „์—ญ ๋ณ€์ˆ˜๊ฐ์ฒด'],
    }
    "closure ์ปจํ…์ŠคํŠธ":  {
      scopeChain: ['closure ๋ณ€์ˆ˜๊ฐ์ฒด', 'makeClosure ๋ณ€์ˆ˜๊ฐ์ฒด', '์ „์—ญ ๋ณ€์ˆ˜๊ฐ์ฒด'],
    }

    โฌ† Back to Top

  16. Javascript์—์„œ false๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ๋“ค์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ํ•ด๋‹น ์ž๋ฃŒํ˜•๊ณผ ๊ฐ’๋“ค์ด ๊ธฐ๋ณธ์ ์œผ๋กœ false ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

    const falsyValues = ['', 0, null, undefined, NaN, false];

    โฌ† Back to Top

  17. ๊ฐ’์ด ๊ฑฐ์ง“์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

    ๊ฐ’์— !!์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    โฌ† Back to Top

  18. 'use strict'๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    use strict๋Š” Javascript์˜ ES5 ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ํ•จ์ˆ˜ ๋˜๋Š” ์ „์ฒด Script์—์„œ ์ฝ”๋“œ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ์ดˆ๊ธฐ์— ๋ฒ„๊ทธ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ทœ์ œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

    • ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ํ• ๋‹น์„ ๋ง‰๋Š”๋‹ค.
    function returnY() {
      'use strict';
      y = 123;
      return y;
    }
    • ์ฝ๊ธฐ ์ „์šฉ ๋˜๋Š” ์“ฐ๊ธฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ „์—ญ ๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹น์„ ๋ง‰๋Š”๋‹ค.
    'use strict';
    var NaN = NaN;
    var undefined = undefined;
    var Infinity = 'and beyond';
    • ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์ค‘๋ณต์„ ๋ง‰๋Š”๋‹ค.
    'use strict';
    function someFunc(a, b, b, c){}
    • eval ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.
    'use strict';
    evel('var x = 1;');
    console.log(x) // Throws a Reference Error :: x is not defined

    โฌ† Back to Top

  19. Javascript์—์„œ์˜ 'this'๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ๊ธฐ๋ณธ์ ์œผ๋กœ this๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฐ์ฒด ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋•Œ๋ฌธ์— ์ „์—ญ ์ปจํ…์ŠคํŠธ ์ƒํƒœ์—์„œ this๋Š” window๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • ๊ฐ์ฒด ๋‚ด์—์„œ๋Š” window๊ฐ€ ์•„๋‹Œ ํŠน์ • ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๋ณ€ํ•œ๋‹ค.

    ์ด๊ฒƒ์€ carDetails์ด๋ผ๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ this๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Ford Mustang๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. this๊ฐ€ carDetails๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

    const carDetails = {
      name: "Ford Mustang",
      getName(){
        return this.name;
      },
    };
    console.log(carDetails.getName()); // logs Ford Mustang

    ํ•˜์ง€๋งŒ ์ด์™€๊ฐ™์€ ์ฝ”๋“œ์—์„œ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค. getCarName ๋ณ€์ˆ˜์— this.name์„ ๋Œ€์ž…์‹œํ‚ค๊ณ  ํ˜ธ์ถœ์‹œ์ผœ๋ณด์•˜๋Š”๋ฐ ์ „์—ญ ๋ธ”๋ก๋‚ด์˜ Ford Ranger๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ด๋Š” getCarName์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ „์—ญ ๋ธ”๋ก์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. this๋Š” window๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๊ณ  window์—์„œ this.name์ด Ford Ranger์ด๋‹ค.

    var name = "Ford Ranger";
    var getCarName = carDetails.getName;
    
    console.log(getCarName()); // logs Ford Ranger

    ํ•ด๋‹น ์ฝ”๋“œ์—์„œ๋Š” guessThis()์™€ thisIsAnnoying()์ด ๋ชจ๋‘ 'test'๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. this๋Š” ํ˜ธ์ถœ๋œ ์‹œ์ ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ๋œ๋‹ค. ์•„๋ฌด๋ฆฌ ๋‚ด๋ถ€์— getThis()๊ฐ€ ์žˆ๊ฑฐ๋‹ˆ myFavoriteObj ๊ฐ์ฒด์—์„œ ์‹œ์ž‘๋ฌ๊ฑฐ๋‹ˆ ํ•ด๋„ ํ˜ธ์ถœํ•œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ „์—ญ ์ปจํ…์ŠคํŠธ์ด๋ฏ€๋กœ this๋Š” window๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

    var name = 'test';
    
    const myFavoriteObj = {
      guessThis(){
        function getThis(){
          console.log(this.name);
        }
        getThis();
      },
      name: 'Marko Polo',
      thisIsAnnoying(callback){
        callback();
      }
    };
    
    myFavoriteObj.guessThis(); //logs the "window" object
    myFavoriteObj.thisIsAnnoying(function (){
      console.log(this.name); //logs the "window" object
    });

    ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ name์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” guessThis() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ guessThisํ•จ์ˆ˜ ๋‚ด์˜ this๋Š” myFavoriteObj๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  getName()ํ•จ์ˆ˜์˜ this๋Š” window๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์— this๊ฐ€ ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์—„์—ฐํžˆ myFavoriteObj.guessThis()๋ฅผ ํ˜ธ์ถœํ–ˆ๊ธฐ์— javascript์—์„œ this๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋ฐ‘์˜ getName()์€ ๋‹จ์ˆœํžˆ window๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

    ๋•Œ๋ฌธ์— guessThis() ์•ˆ์—์„œ this๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ๋‚ด๋ถ€์˜ name์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    const myFavoriteObj = {
      guessThis(){
        const self = this;
    
        function getName(){
          console.log(self.name);
        }
        getName();
      },
      name: 'Marko Polo',
      thisIsAnnoying(callback){
        callback();
      }
    };
    
    myFavoriteObj.guessThis();

    ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ES6 `Arrow Function`์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Arrow Function์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์•ˆ์˜ this๋Š” ์ƒ์œ„ scope์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ธฐ๋ณธ ํ•จ์ˆ˜ ์„ ์–ธ์‹œ this๊ฐ€ ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜์ง€๋งŒ, Arrow ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ๋Š” ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ํ•ญ์ƒ ์ƒ์œ„ scope์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์œ„์˜ scope๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ (Lexical this) ๋ผ๊ณ  ํ•œ๋‹ค.
    const myFavoriteObj = {
      guessThis(){
        const getName = () => {
          console.log(this.name);
        }
    
        getName();
      },
      name: 'Marko Polo',
      thisIsAnnoying(callback){
        callback();
      }
    };

    โฌ† Back to Top

js-interview-question's People

Contributors

junhokims avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.