glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (97)
    • Languages (11)
      • JavaScript πŸ’› (3)
      • Python 🐍 (4)
      • Java β˜•οΈ (3)
      • Swift 🧑 (1)
    • Computer_Science (1)
      • Computer_Network πŸ•Έ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring πŸ€ (1)
    • AI (2)
      • NLP πŸ—£ (1)
      • AI_Math βž— (1)
    • κ°œλ°œν™˜κ²½ κΎΈλ―ΈκΈ° ✌ (1)
    • 생각정리 ✍🏻 (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ§‘πŸ»β€πŸ’»Github

곡지사항

인기 κΈ€

νƒœκ·Έ

  • Algorithm
  • Baekjoon
  • brute-force
  • 완전탐색
  • c++
  • boostcampaitech
  • λ™μ κ³„νšλ²•
  • mst
  • ps
  • 이뢄탐색
  • binary search
  • Stack
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • DP
  • 2019 카카였 개발자 겨울 인턴십
  • Java
  • Python
  • BOJ
  • bfs
  • 카카였 기좜

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
glowing713

Frontend-Deep-Dive

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ” 이유
Languages/JavaScript πŸ’›

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ” 이유

2021. 12. 7. 16:56

이 본문은 μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜μ˜ κ°œλ…μ„ λ‹€λ£Ήλ‹ˆλ‹€πŸ’ͺ🏼

 

본문을 μ‹œμž‘ν•˜κΈ°μ— μ•žμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ¦¬ν„°λŸ΄κ³Ό ν‘œν˜„μ‹μ— λŒ€ν•œ κ°œλ…μ„ κ°„λ‹¨νžˆ μ •λ¦¬ν•˜κ³ μž ν•œλ‹€.

 

λ¦¬ν„°λŸ΄(Literal)

μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•μ„ λ§ν•œλ‹€.

// number literal 3
123;

이 예제의 123은 λ‹¨μˆœν•œ μˆ«μžκ°’μ΄ μ•„λ‹Œ 숫자 λ¦¬ν„°λŸ΄μ΄λ‹€. μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 아라비아 숫자 ν‘œν˜„μ„ μ‚¬μš©ν•΄ 숫자 123을 μ½”λ“œμ— κΈ°μˆ ν•˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 이λ₯Ό μˆ«μžκ°’ 123으둜 ν‰κ°€ν•œλ‹€.

즉, μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 값을 μƒμ„±ν•˜λŠ” 것이닀.
μ•„λž˜μ—μ„œ λ‹€μ‹œ μ–ΈκΈ‰ν•˜κ² μ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 객체둜 μ •μ˜ν•œλ‹€. 즉, 객체 λ¦¬ν„°λŸ΄λ‘œ 객체λ₯Ό μƒμ„±ν•˜λŠ” κ²ƒμ²˜λŸΌ ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ ν•¨μˆ˜λ₯Ό 생성할 수 있고 μ΄λŠ” ν•˜λ‚˜μ˜ 객체(κ°’)으둜 μ²˜λ¦¬λœλ‹€. 이 점을 κΈ°μ–΅ν•΄λ‘μž.

 

ν‘œν˜„μ‹(Expression)

ν‘œν˜„μ‹μ˜ 핡심은 값을 μƒμ„±ν•˜λŠ” λ¬Έμ΄λΌλŠ” 점이닀. ν‘œν˜„μ‹μ΄ ν‰κ°€λ˜λ©΄ λ°˜λ“œμ‹œ μƒˆλ‘œμš΄ 값을 μƒμ„±ν•˜κ±°λ‚˜ 기쑴의 값을 μ°Έμ‘°ν•˜κ²Œ λœλ‹€.

123 숫자 λ¦¬ν„°λŸ΄μ€ μˆ«μžκ°’μ„ μƒμ„±ν•œλ‹€. μ΄λŠ” 값을 μƒμ„±ν•˜λŠ” κ΅¬λ¬Έμ΄λ―€λ‘œ ν‘œν˜„μ‹μ΄λ‹€.
var score = 50 + 50; 숫자 λ¦¬ν„°λŸ΄κ³Ό μ—°μ‚°μžλ‘œ 이루어진 50+50은 μˆ«μžκ°’ 100을 μƒμ„±ν•˜λ―€λ‘œ μ—­μ‹œ ν‘œν˜„μ‹μ΄λ‹€.
score; // 100 이 ꡬ문은 μˆ«μžκ°’ 100을 μ°Έμ‘°ν•œλ‹€. 값을 μƒμ„±ν•˜μ§€λŠ” μ•Šμ§€λ§Œ κ°’μœΌλ‘œ ν‰κ°€λ˜λ―€λ‘œ ν‘œν˜„μ‹μ΄λ‹€.

ν‘œν˜„μ‹μ€ κ°’μœΌλ‘œ ν‰κ°€λœλ‹€. 이 말은 κ°’κ³Ό λ™μΌν•˜κ²Œ μ—¬κ²¨μ§„λ‹€λŠ” 말이닀.

값이 μœ„μΉ˜ν•  수 μžˆλŠ” μžλ¦¬μ—λŠ” ν‘œν˜„μ‹λ„ μœ„μΉ˜ν•  수 μžˆλ‹€λŠ” 점이닀.
이λ₯Ό ν™œμš©ν•˜λ©΄ ν‘œν˜„μ‹μΈ λ¦¬ν„°λŸ΄μ΄ ꡬ문(statement)의 κ°’ μžλ¦¬μ— μœ„μΉ˜ν•  μˆ˜λ„ 있게 λœλ‹€.

이 ν₯미둜운 κ°œλ…μ΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜ κ°œλ…μ— μ μš©λ˜μ–΄ μ‹ λ°•ν•œ ν‘œν˜„μ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.


ν•¨μˆ˜(Function)

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ κ²ƒμ²˜λŸΌ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 객체 νƒ€μž…μ˜ 값이닀. λ”°λΌμ„œ 숫자 λ¦¬ν„°λŸ΄λ‘œ μˆ«μžκ°’μ„ μƒμ„±ν•˜λŠ” κ²ƒμ²˜λŸΌ ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ ν•¨μˆ˜λ₯Ό 생성할 수 있고, 이λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  μˆ˜λ„ μžˆλ‹€. ν•¨μˆ˜κ°€ κ°μ²΄λΌλŠ” 사싀은 μžλ°”μŠ€ν¬λ¦½νŠΈλ§Œμ˜ μ€‘μš”ν•œ νŠΉμ§•μ΄λ‹€.

var func = function add(x, y) {
  return x + y;
}

μœ„μ˜ μ½”λ“œλŠ” ν•¨μˆ˜ ν‘œν˜„μ‹μ΄λΌκ³  μ •μ˜ν•œλ‹€. ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ 톡해 ν•¨μˆ˜ 객체(κ°’)λ₯Ό μƒμ„±ν•˜κ³ , 이λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것이닀.
ν•¨μˆ˜ λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹μ€ ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•œλ‹€λŠ” 점을 μ΄μš©ν•˜λ©΄ 이런 syntax sugar도 κ°€λŠ₯ν•˜λ‹€πŸ‘Ύ

(function func() {return 10;}) // ƒ func() {return 10;}

κ·Έλ£Ή μ—°μ‚°μžμ˜ ν”Όμ—°μ‚°μžλ‘œ ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ„ μ „λ‹¬ν•˜λŠ” μ½”λ“œμ΄λ‹€.
이 ꡬ문은 ν•¨μˆ˜ 선언문이 μ•„λ‹Œ ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ ν‰κ°€λ˜κ³ , ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•˜κ²Œ λœλ‹€. ν•¨μˆ˜ ν‘œν˜„μ‹μ€ μ•„λž˜μ™€ 같이 λ”μš± κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.

// ν•¨μˆ˜ 선언문이 μ•„λ‹Œ ν•¨μˆ˜ ν‘œν˜„μ‹μ€ ν•¨μˆ˜ 이름(μ‹λ³„μž)을 μƒλž΅ν•  수 μžˆλ‹€.
// 이 ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ€ κ°’μœΌλ‘œ ν‰κ°€λ˜λŠ” ν‘œν˜„μ‹μœΌλ‘œ ν‰κ°€λ˜λ―€λ‘œ λ‹€μŒκ³Ό 같은 ν‘œν˜„λ„ κ°€λŠ₯ν•˜λ‹€.
(function () {return 10;})  // ƒ () {return 10;}
// ES6의 ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 더 κ°„λ‹¨ν•˜κ²Œ ν•  수 μžˆλ‹€.
(() => {return 10;})  // () => {return 10;}

이λ₯Ό 또 ν™œμš©ν•˜λ©΄, ν•¨μˆ˜λ₯Ό μ¦‰μ‹œ μ‹€ν–‰μ‹œν‚€λŠ” μ½”λ“œλ‘œ λ§Œλ“€ 수 μžˆλ‹€.

μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜(IIFE: Immediately Invoked Function Expression)라고 λΆ€λ₯Έλ‹€.

// 두 κ°€μ§€ λͺ¨λ‘ κΈ°λŠ₯은 λ™μΌν•˜μ§€λ§Œ, 첫 번째 방식을 더 많이 μ‚¬μš©ν•œλ‹€.

(function func() {return 10;}()); // 10
(function func() {return 10;})(); // 10

// 인자λ₯Ό μ „λ‹¬ν•˜μ—¬ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.
res = (function (a, b) {
	return a * b;
}(3, 5)); // 15

 

마무리

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ ν• λ‹Ήν•  수 μžˆλŠ” μ΄μœ λŠ” ν•¨μˆ˜κ°€ ν•˜λ‚˜μ˜ 객체둜 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ μ–Έμ–΄μ˜ νŠΉμ§•μ„ λ”μš± 깊게 μ΄ν•΄ν•˜κ²Œ λ˜λŠ” 것 κ°™λ‹€. λ½œμƒ€πŸ”₯πŸ”₯

 

Reference

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive 12μž₯ ν•¨μˆ˜

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Languages > JavaScript πŸ’›' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ›μ‹œ κ°’κ³Ό 객체(Immutability, Mutability)  (0) 2021.12.06
[JS] λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(Hoisting)에 λŒ€ν•˜μ—¬  (0) 2020.02.19
    'Languages/JavaScript πŸ’›' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ›μ‹œ κ°’κ³Ό 객체(Immutability, Mutability)
    • [JS] λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(Hoisting)에 λŒ€ν•˜μ—¬
    glowing713
    glowing713

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”