๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ CS ์ค€๋น„/JavaScript

javascript

  • event delegation์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • this๋Š” JavaScript์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • prototype ๊ธฐ๋ฐ˜ ์ƒ์†์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • AMD์™€ CommonJS๋Š” ๋ฌด์—‡์ด๊ณ , ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?
  • ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์ฆ‰์‹œ ํ˜ธ์ถœ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(IIFE)๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ด์œ ์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”: function foo(){ }();.
    • IIFE๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
  • null๊ณผ unedefined ๊ทธ๋ฆฌ๊ณ  undeclared์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • ๋‘๊ฐœ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ์š”?
  • ํด๋กœ์ ธ(Closure)๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ/์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • ํด๋กœ์ ธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์„ ํ˜ธํ•˜๋Š” ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€์š”? argyle (IIFEs์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค)
  • ์ต๋ช…ํ•จ์ˆ˜(anonymous functions)๋Š” ์ฃผ๋กœ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
  • ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š”์ง€? (๋ชจ๋“ˆ ํŒจํ„ด, ์ „ํ†ต์  ์ƒ์†)
  • ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด(Host Objects)์™€ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด(Native Objects)์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • ๋‹ค์Œ ์ฝ”๋“œ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
function Person(){} var person = Person() var person = new Person()
  • .call๊ณผ .apply์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • Function.prototype.bind์„ ์„ค๋ช…ํ•˜์„ธ์š”.
  • document.write()๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
  • UA ๋ฌธ์ž์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ ๊ฒ€์ถœ(feature detection)๊ณผ ๊ธฐ๋Šฅ ์ถ”๋ก (feature inference)์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”.
  • AJAX์— ๊ด€ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์„ธ์š”.
  • AJAX๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • JSON์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ ๋˜๋Š”์ง€ ์„ค๋ช…ํ•˜์„ธ์š”. (๊ทธ๋ฆฌ๊ณ  AJAX์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์„ค๋ช…ํ•˜์„ธ์š”.)
  • ๊ธฐ์กด์— JavaScript ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‚˜์š”? ๋งŒ์•ฝ์— ์žˆ๋‹ค๋ฉด, ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.
  • "ํ˜ธ์ด์ŠคํŒ…(Hoisting)"์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.
  • ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง(Event Bubbling)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.
  • ์ด๋ฒคํŠธ ์บก์ณ๋ง(Event Capturing)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.
  • "์†์„ฑ(Attribute)"์™€ "์š”์†Œ(property)"์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • ๋‚ด์žฅ๋œ JavaScript ๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
  • document load event์™€ DOMContentLoaded event์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • ==์™€ ===์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • JavaScript์˜ "๋™์ผ์ถœ์ฒ˜์ •์ฑ…(the same-origin policy)"์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.
  • ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“œ์„ธ์š”.
duplicate([1,2,3,4,5]); // [1,2,3,4,5,1,2,3,4,5]
  • ์‚ผํ•ญ์‹(Ternary statement)์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ด๊ณ , ๊ทธ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ์ž ๋‹จ์–ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?
  • use strict;์€ ๋ฌด์—‡์ด๊ณ , ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • 100๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 3์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ๋Š” fizz, 5์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ๋Š” buzz, 3๊ณผ 5์˜ ๊ณต๋ฐฐ์ˆ˜์ผ ๋•Œ๋Š” fizzbuzz๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.
  • ์ „์—ญ scope๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ๋•Œ๋•Œ๋กœ load event๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋˜ ๋‹จ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ€์•ˆ์— ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • SPA์—์„œ SEO์— ์œ ๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • Promise๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‚˜์š”?
  • Promise๊ฐ€ ์ฝœ๋ฐฑ ๋Œ€๋น„ ์žฅ/๋‹จ์ ์€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • JavaScript์˜ ์ž‘๋™๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • JavaScript๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ๊ฐ์ฒด ์•ˆ์˜ ์†์„ฑ๊ณผ ๋ฐฐ์—ด์˜ ์•„์ดํ…œ์„ ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • mutable object์™€ immutable object์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    • JavaScript์—์„œ immutable ๊ฐ์ฒด์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์„ธ์š”.
    • immutability์˜ ์žฅ/๋‹จ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • ์ž์‹ ์˜ ์ฝ”๋“œ์—์„œ ๋ถˆ๋ณ€์„ฑ(immutability๋ฅผ) ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
  • ๋™๊ธฐ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ ๋ฐฉ์‹ ํ•จ์ˆ˜์˜ ์ฐจ์ด์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • event loop์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    • call stack๊ณผ task queue์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • function foo() {}์™€ var foo = function() {}์—์„œ foo ์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.
  • let, var, const์˜ ์ฐจ์ด์ ์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

 


this๋Š” JavaScript์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

this๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฒฐ์ •์„ ํ•ด ์ฃผ๋Š”๋ฐ์š”. ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์ผ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ this๋กœ ๋ฐ”์ธ๋”ฉ์ด ๋˜๊ณ , ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ผ ๊ฒฝ์šฐ์—๋Š” window, global ๋“ฑ์˜ ์ „์—ญ ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ์ด ๋ฉ๋‹ˆ๋‹ค.
new ํ‚ค์›Œ๋“œ๋กœ ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ๊ฐ์ฒด์˜ prototype์„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype์ด ์„ค์ • ๋˜๋ฉฐ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ this๋กœ ๋ฐ”์ธ๋”ฉ ๋ฉ๋‹ˆ๋‹ค.

 

null๊ณผ unedefined ๊ทธ๋ฆฌ๊ณ  undeclared์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

null์€ ๋นˆ ๊ฐ์ฒด๋ฅผ ๋œปํ•˜๋ฉฐ undefined๋Š” ์„ ์–ธ๋งŒ ๋˜๊ณ  ํ• ๋‹น๋˜์ง€ ์•Š์Œ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
undeclared๋Š” ์œ ํšจ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ „์—ญ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.


ํด๋กœ์ ธ(Closure)๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ/์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
ํด๋กœ์ €๋Š” ๋…๋ฆฝ์ ์ธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋กœ์ € ์•ˆ์— ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ๋งŒ๋“ค์–ด์ง„ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•œ๋‹ค. ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ์€๋‹‰ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ๋„ ์œ ์šฉํ•˜๋‹ค.
- ์‚ฌ์šฉ ํ•˜๋Š” ์ด์œ 
1) ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
2) ์ „์—ญ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ์–ต์ œ ํ•˜๊ธฐ์œ„ํ•ด
3) ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๊ธฐ ์œ„ํ•ด

 

JavaScript์˜ ์ž‘๋™๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” V8 ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๊ณ  ์ฝœ๋ฐฑ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ ์Šคํƒ์ด ํ•˜๋‚˜์ด๊ณ  ๋”ฐ๋ผ์„œ ๊ทธ ํ•˜๋‚˜์˜ ํ˜ธ์ถœ ์Šคํƒ์— ์‹คํ–‰๋œ ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์”ฉ ์Œ“์ด๊ฒŒ ๋œ๋‹ค.
- ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ๋“œ๋ฝ ๊ฐ™์€ ๋ฌธ์ œ๋‚˜ ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ฏผํ•  ํ•„์š”๋Š” ์—†์œผ๋‚˜, ํ˜ธ์ถœ ์Šคํƒ์— ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ฐ€๋งŒํžˆ ์žˆ๊ฒŒ ๋œ๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์›์‹œ ํƒ€์ž…(Primitive Data Type)์€ ๋ช‡๊ฐ€์ง€์ด๋ฉฐ, ์ „๋ถ€ ๋งํ•ด๋‹ฌ๋ผ
5๊ฐ€์ง€ : Number, String, Boolean, Null, Undefined, (Symbol)


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Number Type์€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€, ์™œ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋Š”๊ฐ€
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋„˜๋ฒ„ํƒ€์ž…์€ ๊ต‰์žฅํžˆ ์œ ์—ฐํ•ด์„œ ์—”์ง„์ด ์›ํ• ๋•Œ๋งˆ๋‹ค ์•”์‹œ์  ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์–‘ํ•œ ์—”์ง„์ด ์กด์žฌํ•˜๋Š” ํ˜„ ์›น ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ƒ ์ด๋Ÿฌํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์˜ ์œ ์—ฐ์„ฑ์€ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.


์ต๋ช…ํ•จ์ˆ˜(anonymous functions)๋Š” ์ฃผ๋กœ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
์ต๋ช…ํ•จ์ˆ˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.


AJAX
AJAX๋Š” ๋น„๋™๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ xml์˜ ์•ฝ์ž์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ xml ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๊ธฐ์กด์—๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋‹ค์‹œ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ–ˆ๊ณ  ์ด ๊ณผ์ •์—์„œ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚ญ๋น„๋˜์—ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ajax๋Š” ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ ์ผ๋ถ€๋งŒ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค. ์ด๋กœ ์ธํ•ด ์ž์›๊ณผ ์‹œ๊ฐ„์„ ๋งŽ์ด ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.


ํ˜ธ์ด์ŠคํŒ…(Hoisting)
ํ˜ธ์ด์ŠคํŒ…์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•จ์— ์žˆ์–ด์„œ, Global ์˜์—ญ ๋˜๋Š” ํ•จ์ˆ˜ ์˜์—ญ ์•ˆ์— ๋Œ€ํ•ด์„œ ์ฃผ์–ด์ง„ ์„ ์–ธ๋“ค์„ ๋ชจ๋‘ ๋Œ์–ด์˜ฌ๋ ค์„œ ํ•ด๋‹น ์œ ํšจ ๋ฒ”์œ„ ์ตœ์ƒ๋‹จ์— ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


Callback๊ณผ Promise์˜ ์ฐจ์ด์ 

Callback  Promise
๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด ์กŒ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์—๊ฒŒ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜์–ด ์–ด๋Š ์‹œ์ ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋˜์ ธ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ์ค‘์ฒฉ๋ฌธ์ด ๋ฐœ์ƒํ•˜๋ฉด์„œ ์—๋Ÿฌ์ฒ˜๋ฆฌ ํ•œ๊ณ„๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Promise๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์–ด๋–ค ๊ฐ’์ด ์ƒ์„ฑ ๋˜์—ˆ์„ ๋•Œ ๊ทธ ๊ฐ’์„ ๋Œ€์‹ ํ•˜๋Š” ๋Œ€๋ฆฌ์ž์ด๋‹ค. ๋น„๋™๊ธฐ ์—ฐ์‚ฐ์ด ์ข…๋ฃŒ๋œ ์ดํ›„์— ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์ด๋‚˜ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ด
๋‹ค. Promise ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„ฑ๊ณต, ์‹คํŒจ, ์˜ค๋ฅ˜์— ๋”ฐ๋ฅธ ํ›„์†์ฒ˜๋ฆฌ๊ฐ€ ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•ด์„œ ๊ฐ€๋…์„ฑ๋„ ์ข‹๊ณ , ๋น„๋™๊ธฐ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋„ ์ˆ˜์›”ํ•˜๋‹ค.


ES6 ์—์„œ ์ถ”๊ฐ€๋œ ์ŠคํŽ™(let, const, rest parameter, class, arrow function ๋“ฑ)
- const๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” let์„ ์‚ฌ์šฉํ•œ๋‹ค.
- var์€ ์ด์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
- startWith(), endWirh(), includes()๋“ฑ์˜ String ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
- set, weakset ์œผ๋กœ ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


let, var, const์˜ ์ฐจ์ด์ ์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
let, const ์ค‘๋ณต์ด๋‚˜ ํ˜ธ์ด์ŠคํŒ…์„ ์„ ์–ธํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ธ”๋ก ๋‹จ์œ„์˜ ๋ณ€์ˆ˜ํƒ€์ž…์ด๋‹ค.


event loop๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด Call Stack๊ณผ Callback Queue์˜ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜์—ฌ Call Stack์ด ๋นˆ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด, Callback Queue์˜ ์ฒซ๋ฒˆ์งธ ์ฝœ๋ฐฑ์„ Call Stack์œผ๋กœ ๋ฐ€์–ด ๋„ฃ๋Š”๋‹ค.


this๋Š” JavaScript์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
this๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋ฐ”์ธ๋”ฉ์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ค‘ ํ•˜๋‚˜๋กœ, ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์—์„œ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋•Œ๋กœ๋Š” ๋ณต์žกํ•œ ์ฝ”๋“œ์—์„œ ์•”์‹œ์  ๋ฐ”์ธ๋”ฉ์— ์˜ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ call์ด๋‚˜ apply ๊ฐ™์€ ๋‚ด์žฅ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ์„ ํ•ด ์ค€๋‹ค.


prototype ๊ธฐ๋ฐ˜ ์ƒ์†์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์—๋Š” Prototype์ด๋ผ๋Š” ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๊ณ , ์ด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์†์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ํ”„๋กœํ† ํƒ€์ž…๋ผ๋ฆฌ ์—ฐ๊ฒฐ์„ ํ•˜๋Š”๋ฐ, ๋ถ€๋ชจ ํ”„๋กœํ† ํƒ€์ž…์„ create()๋‚˜ setPropertyOf() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

async๊ณผ await์˜ ์ฐจ์ด์ 
- async/await์€ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์œผ๋กœ ES2017์— ๋“ฑ์žฅํ•˜์˜€๋‹ค.
- async์™€ await๋Š” ํ•ญ์ƒ ๊ฐ™์ด ๋ถ™์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
- await ๋ชจ๋“œ๋Š” Promise ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋งŒ์•ฝ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋™๊ธฐ์  ํ•จ์ˆ˜๋ผ๋ฉด ๋ฆฌํ„ด ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ›๋Š”๋‹ค.
- async ํ•จ์ˆ˜๋Š” Promise ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๋‚ด์šฉ์„ ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ ์ง„ํ–‰ ์ˆœ์„œ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


Class๋Š” ๋ฌด์—‡์ด๊ณ , Prototype, fucntion์˜ ES5 ์ŠคํŽ™๋งŒ์œผ๋กœ Class๋ฅผ ๊ตฌํ˜„ํ• ์ˆ˜ ์žˆ๋Š”๊ฐ€
class๋Š” ๋นตํ‹€์ด๋‹ค. ๋ฐ˜์ฃฝ(๊ฐ์ฒด)๋ฅผ class์— ๋„ฃ์œผ๋ฉด ์›ํ•˜๋Š” ๋ชจ์–‘์˜ ๋นต์ด ๋‚˜์˜ค๋Š” ๋นตํ‹€์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฐ™์€ ํ˜ธ์ถœ์„ ๋ฐ˜๋ณตํ•œ๋‹ค๋˜๊ฐ€์˜ ๋ถˆํ•„์š”ํ•œ ํ–‰๋™์ด ๋ฐ˜๋ณต๋˜์–ด ํšจ์œจ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๋Š” ๋นˆ ๊ฐ์ฒด์— ๋ฏธ๋ฆฌ ๊ฐ’๋“ค์„ ๋‹ด์•„๋‘๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋Š” ๊ทธ ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์„ ๊ฐ–์ถฐ์„œ ํด๋ž˜์Šค์˜ ํ™œ์šฉ์ฒ˜๋Ÿผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.


use strict ์€ ๋ฌด์—‡์ด๊ณ , ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์— ๊ด€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
use strict๋Š” ์—„๊ฒฉ ๋ชจ๋“œ๋กœ ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๋ถ€๋ถ„ ํ•จ์ˆ˜์— ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์žฅ์  1. ๊ธฐ์กด์— ๋ฌด์‹œ๋˜๋˜ ์—๋Ÿฌ๋“ค์ด throw ๋˜๋ฉฐ
2. JS ์—”์ง„ ์ตœ์ ํ™” ์ž‘์—…์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ์‹ค์ˆ˜๋“ค์„ ๋ฐ”๋กœ ์žก๊ณ 
3. ECMAScript์˜ ์ฐจ๊ธฐ ๋ฒ„์ „์—์„œ ์ •์˜๋  ๋ฌธ๋ฒ•๋“ค์„ ๊ธˆ์ง€ํ•˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
๋‹จ์  ์—„๊ฒฉ ๋ชจ๋“œ์—์„œ๋Š” ์ด์ „์— ํ—ˆ์šฉ๋˜๋˜ ์‹ค์ˆ˜๋ฅผ ์˜ค๋ฅ˜๋กœ ๋ฐ”๊พธ์–ด ๋†“๋Š”๋‹ค.
๋˜ํ•œ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

๋ชจ๋“ˆ ํŒจํ„ด๊ณผ ์ „ํ†ต์  ์ƒ์†, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์„ ๋งํ•ด๋‹ฌ๋ผ.

์ „ํ†ต์  ์ƒ์† ๋ชจ๋“ˆ ํŒจํ„ด
(์žฅ) ๋ชจ๋“ˆ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ ์ „์—ญ์—์„œ ์ธ์Šคํ„ด์Šคํ™” ๋˜์–ด ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
(๋‹จ) ๊ฐ์ฒด ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ์„ ์•Œ๊ธฐ ์–ด๋ ค์›Œ ์ฝ”๋“œ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šฐ๋ฉฐ ๊ฐ€์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
- ๋ชจ๋“ˆ ํŒจํ„ด์€ ์ „์—ญ ์˜์—ญ์—์„œ ํŠน์ • ๋ณ€์ˆ˜์˜์—ญ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ๊ฐ์ฒด ์•ˆ์˜ public/private์˜ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ ํด๋ž˜์Šค ํ˜•์‹์˜ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
- ์€๋‹‰ํ™”, ๋‹คํ˜•์„ฑ, ์ƒ์†์„ ํ†ตํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
- ์ถ”๊ฐ€์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด์™€ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.
const count = 3
const publicMethod = function () {
    console.log('Public Method : ', count);
}
const publicMethod2 = function () {
    console.log('Public Method2 : ', count);
}
publicMethod();
publicMethod2();
class Module {
    private count: number = 3
    private privateMethod() {
        console.log('Private Method : ', this.count);
    }
    publicMethod() {
        console.log('Public Method : ', this.count);
    }
    public publicMethod2() {
        console.log('Public Method2 : ', this.count);
    }
}
const mod = new Module();
// mod.privateMethod(); // coudn't access
mod.publicMethod();
mod.publicMethod2();


Javascript Scope Chaining
์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์ค‘๋ณต๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋”๋ผ๋„ ๋จผ์ € ํƒ์ƒ‰๋œ ๋ณ€์ˆ˜๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด๋‹ค.


์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง(Event Bubbling), ์ด๋ฒคํŠธ ์บก์ณ๋ง(Event Capturing)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.
- ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ํŠน์ • ํ™”๋ฉด ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋” ์ƒ์œ„ ์š”์†Œ๋“ค๋กœ ์ „๋‹ฌ๋˜์–ด๊ฐ€๋Š” ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.
- ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง์€ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ๋ฐ˜๋Œ€๋กœ ์ƒ์œ„ ์š”์†Œ์—์„œ ํ•˜์œ„ ์š”์†Œ๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.


ES6์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ ์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ ์ฐจ์ด
์ผ๋ฐ˜ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ this์— ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ this์— ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ๋ฐ˜๋ฉด์—, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ this์— ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

 

JSON๊ณผ ์žฅ์ 
JSON์€ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํŒŒ์ผ ํ˜•์‹์ด๋‹ค.
(์žฅ) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์—ฐ๊ด€๋ฐฐ์—ด(Key/Value)์„ ๊ธฐ์ดˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, JSON์€ ์ด๋Ÿฌํ•œ ์—ฐ๊ด€ ๋ฐฐ์—ด์„ ํ‘œ์‹œํ•˜๋Š”๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ธ ๋ฐฉ์‹์ด๋‹ค. JSON์€ ํ…์ŠคํŠธ ํฌ๋ฉง์ด๋ฉฐ ์œ ๋‹ˆ์ฝ”๋“œ ์ธ์ฝ”๋”ฉ์ด๋‹ค. AJAX์—์„œ JSON ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด eval() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ํ‚ค ๊ฐ’์„ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
(๋‹จ) XML๋กœ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŒŒ์‹ฑ ์‹œ์— ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ๋„ ์‹ ๊ฒฝ์„ ์จ ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.


์ „์—ญ scope์˜ ์žฅ๋‹จ์ 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ์Šค์ฝ”ํ”„ ์ฒด์ธ(scope chain)์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋Š”๋ฐ, ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์™ธ๋ถ€ ํ•จ์ˆ˜์—์„œ๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋จผ์ € ํ•ด๋‹น ์Šค์ฝ”ํ”„์—์„œ ์ฐพ์€ ๋’ค, ๋งŒ์•ฝ ์—†์œผ๋ฉด outer ์Šค์ฝ”ํ”„์—์„œ ์ฐพ๊ณ , ๊ทธ๋ ‡๊ฒŒ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ€๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ์ „์—ญ scope์—์„œ ์ฐพ๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ž‘์—…ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ํ˜‘์—…ํ•  ๋•Œ ์šฐ์—ฐํžˆ ๊ฐ™์€ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์„œ ์ด์ „์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ตณ์ด ์ „์—ญ ๋ณ€์ˆ˜์˜ ์žฅ์ ์„ ๊ผฝ์ž๋ฉด ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ, ์ €์žฅ๋œ ๊ฐ’์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.


function foo() {} ์™€ var foo = function() {} ์—์„œ foo์˜ ์ฐจ์ด
์ „์ž๋Š” ํ•จ์ˆ˜ ์„ ์–ธ(function statement)์ด๋ฉฐ ํ›„์ž๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„(function literal)์ด๋‹ค.
- ํ•จ์ˆ˜ ์„ ์–ธ์€ ์ฝ”๋“œ ๋ธ”๋Ÿญ ์ž์ฒด๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋Ÿญ์„ ์ฝ˜์†”์—์„œ ์‹คํ–‰ํ•˜์—ฌ๋„ ์–ด๋– ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฆฌํ„ด๋˜์ง€ ์•Š๋Š”๋‹ค. Class์™€ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•ด๋„ ๋œ๋‹ค.
- ํ•จ์ˆ˜ ํ‘œํ˜„์€ ํŠน์ • ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ฆ‰์‹œ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ธ”๋Ÿญ์œผ๋กœ์„œ ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‘˜์€ ํ˜ธ์ด์ŠคํŒ… ๊ด€์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์„ ์–ธ์‹์€ ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€๋งŒ ํ‘œํ˜„์‹์€ ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€ ์•Š๋Š”๋‹ค.


ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ํ•จ์ˆ˜๊ฐ€ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•ด๋„ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋‹ค.
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜(pure function)๋ฅผ ์กฐํ•ฉํ•˜๊ณ  ๊ณต์œ  ์ƒํƒœ(shared state), ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ(mutable data) ๋ฐ ๋ถ€์ž‘์šฉ(side-effects)์„ ํ”ผํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ช…๋ นํ˜•(imperative)์ด ์•„๋‹Œ ์„ ์–ธํ˜•(declarative)์ด๋ฉฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ๋‹ค.


Callback๊ณผ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
- ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ธ ์˜ต์ €๋ฒ„(Observer) ํŒจํ„ด์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์œผ๋กœ์จ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)๊ฐ€ ๋ฐœ์ƒ ํ•˜์˜€์„ ๊ฒฝ์šฐ์— ์ด๋Ÿฌํ•œ ์‚ฌ์‹ค์„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.
- ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์„œ๋ฒ„๋กœ ์–ด๋– ํ•œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋™์•ˆ ๊ฐ€๋งŒํžˆ ์‹œ๊ฐ„์„ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•จ์œผ๋กœ์จ ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ์— ๋น„ํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”์„œ๋“œ .call()๊ณผ .apply(), .bind() ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.
this๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹์— ๋”ฐ๋ผ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅด์ผฐ๋‹ค๋ฉด call apply bind๋Š” ํ•จ์ˆ˜๊ฐ€ ์ง์ ‘ ์‹คํ–‰๋ฌธ๋งฅ์„ ๊ฒฐ์ •ํ•œ๋‹ค. ๊ทธ ์ค‘์— call, apply๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์‹คํ–‰ํ•œ๋‹ค. call apply๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ์˜ ์žฅ์ ์€ ์ฒซ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์—†๋”๋ผ๋„ ์—๋Ÿฌ์—†์ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(์ž๋™์œผ๋กœ ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰) bind๋Š” ์ง€์ •ํ•œ ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ์ •๋ฆฌํ•˜๋ฉด call apply๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๊ณ ,
bind๋Š” ์ƒˆ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.


ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด(Host Objects)์™€ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด(Native Objects)์˜ ์ฐจ์ด์ 
- ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ œ๊ณตํ•˜๋Š” window, XMLHttpRequest, HTMLElement ๋“ฑ์˜ DOM ๋…ธ๋“œ ๊ฐ์ฒด์™€ ๊ฐ™์ด ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์— ์ •์˜๋œ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ๊ณผ ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ ๋™์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(Node.js)๋Š” ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ์˜ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋Š” ์ „์—ญ ๊ฐ์ฒด์ธ
window, BOM(Browser Object Model)๊ณผ DOM(Document Object Model) ๋ฐ XMLHttpRequest ๊ฐ์ฒด ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
- ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด๋Š” ECMAScript ๋ช…์„ธ์— ์ •์˜๋œ ๊ฐ์ฒด๋ฅผ ๋งํ•˜๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐ์ฒด๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ๊ณผ ๊ด€๊ณ„์—†์ด ์–ธ์ œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
Object, String, Number, Function, Array, RegExp, Date, Math์™€ ๊ฐ™์€ ๊ฐ์ฒด ์ƒ์„ฑ์— ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์™€ ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.