λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

 

GitHub - yjs03057/33-js-concepts: λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…. Contribute to yjs03057/33-js-concepts development by creating an account on GitHub.

github.com

ν‘œν˜„μ‹(Expression) vs λ¬Έ(Statement)

μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” 2가지 μ£Όμš” 문법이 μžˆμŠ΅λ‹ˆλ‹€.

  • ν‘œν˜„μ‹(Expression)
  • λ¬Έ(Statement)

ν‘œν˜„μ‹(Expression)은 λ¬Έ(Statement)처럼 λ™μž‘ν•  수 μžˆμ§€λ§Œ,
λ¬Έ(Statement)은 ν‘œν˜„μ‹(Expression)처럼 λ™μž‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

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

  • ν‘œν˜„μ‹(Expression)은 단일 값을 μƒμ„±ν•©λ‹ˆλ‹€.
  • κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” 문은 μ „λΆ€ ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
  • κ°’ μžμ²΄λ„ ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ ν‰κ°€λ˜κΈ°μ— ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
10
3.14
'eun'
  • 아무리 ν‘œν˜„μ‹μ΄ 길어지더라도 κ²°κ΅­ 단일 값을 μƒμ„±ν•˜κΈ°μ— ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
10 + 10
20 * 20
(Math.random() * (100 - 10)) + 20 // 95.80295646022229
true == 1; // true
  • λ¦¬ν„°λŸ΄μ€ κ°’μœΌλ‘œ ν‰κ°€λ˜κΈ°μ—, λ¦¬ν„°λŸ΄λ„ 결ꡭ은 ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
{name: 'eun', address:'Seoul'} // 객체 λ¦¬ν„°λŸ΄
[ 1, 2, 3] // λ°°μ—΄ λ¦¬ν„°λŸ΄
function() {} // ν•¨μˆ˜ λ¦¬ν„°λŸ΄
/[A-Z]+/g // μ •κ·œ ν‘œν˜„μ‹ λ¦¬ν„°λŸ΄
  • ν•¨μˆ˜ 호좜의 κ²°κ³Ό λ˜ν•œ ν•˜λ‚˜μ˜ 값을 λ°˜ν™˜ν•˜κΈ°μ— μ‹μž…λ‹ˆλ‹€.

λ¬Έ(Statement)

  • 문은 ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„μ΄μž μ΅œμ†Œ μ‹€ν–‰ λ‹¨μœ„μž…λ‹ˆλ‹€.
  • Javascriptμ—μ„œ 문은 값이 λ“€μ–΄κ°€μ•Ό ν•  곳에 λ“€μ–΄κ°ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.
  • λ”°λΌμ„œ 문은 ν•¨μˆ˜μ˜ 인자, λŒ€μž… μ—°μ‚°λœ κ°’, μ—°μ‚°μžμ˜ ν”Όμ—°μ‚°μž, λ°˜ν™˜ κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
foo(if (true) { return 2 }) // Error

Javascriptμ—μ„œ μ‚¬μš©λ˜λŠ” 문은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • if
  • if-else
  • while
  • do-while
  • for
  • switch
  • for-in
  • debugger
  • variable declaration
if (true) { 9 + 9 } // 18

문을 μ‚¬μš©ν•΄μ„œ 결과값을 좜λ ₯ν•˜μ˜€μ§€λ§Œ, 문의 κ²°κ³Όλ₯Ό ν‘œν˜„μ‹μ²˜λŸΌ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
μ§€κΈˆκΉŒμ§€ 배운 λ‚΄μš©μœΌλ‘œλŠ” 문은 μ•„λ¬΄λŸ° 값도 λ°˜ν™˜ν•˜λ©΄ μ•ˆ λμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ μš°λ¦¬λŠ” 이 λ°˜ν™˜λœ 값을 μ΄μš©ν•  수 μ—†κ³ , λ”°λΌμ„œ λ¬Έ(Statement)이 λ°˜ν™˜ν•˜λŠ” 값은 μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ μ„ μ–Έ, ν•¨μˆ˜ ν‘œν˜„μ‹, λ„€μž„λ“œ(Named) ν•¨μˆ˜ ν‘œν˜„μ‹

  • ν•¨μˆ˜ 선언문은 λ¬Έ(Statement)μž…λ‹ˆλ‹€.
function foo(func) {
  return func.name
}
  • 읡λͺ… ν•¨μˆ˜λΌ λΆˆλ¦¬λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹ λ˜ν•œ 식(Expression)μž…λ‹ˆλ‹€.
foo(function () {} ) // ''
  • 이름이 μžˆλŠ” λ„€μž„λ“œ(Named) ν•¨μˆ˜ ν‘œν˜„μ‹ λ˜ν•œ 식(Expression)μž…λ‹ˆλ‹€.
foo(function myName () {} ) // 'myName'
  • μ›λž˜ 값이 λ“€μ–΄μ˜¬ 곳에 ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ²Œ 되면, JavascriptλŠ” κ·Έ ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ μ‚¬μš©ν•˜λ €κ³  ν•©λ‹ˆλ‹€.
  • μ„ μ–Έλœ ν•¨μˆ˜κ°€ κ°’μœΌλ‘œ μ‚¬μš©λ  수 μ—†λ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
if () {
  function foo () {} // ν•¨μˆ˜ μ„ μ–Έλ¬Έ
}

function foo () {} // ν•¨μˆ˜ μ„ μ–Έλ¬Έ

function foo () {
  function bar() {} //ν•¨μˆ˜ μ„ μ–Έλ¬Έ
}

function foo () {
  return function bar () {} // λ„€μž„λ“œ ν•¨μˆ˜ ν‘œν˜„μ‹
}

foo(function () {}) // 읡λͺ… ν•¨μˆ˜ ν‘œν˜„μ‹

function foo () {
  return function bar () {
    function baz () {} // ν•¨μˆ˜ μ„ μ–Έλ¬Έ
  }
}

function () {} // SyntaxError: function statement requires a name

if (true){
  function () {} //SyntaxError: function statement requires a name
}

ν‘œν˜„μ‹μΈ λ¬Έκ³Ό ν‘œν˜„μ‹μ΄ μ•„λ‹Œ λ¬Έ

  • ν‘œν˜„μ‹μ€ 문의 일뢀일 μˆ˜λ„ 있고 κ·Έ 자체둜 문이 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
var x; // λ³€μˆ˜ 선언문은 κ°’μœΌλ‘œ 평가될 수 μ—†μœΌλ―€λ‘œ ν‘œν˜„μ‹μ΄ μ•„λ‹™λ‹ˆλ‹€.

x = 1+2; // x = 1+2λŠ” ν‘œν˜„μ‹μ΄λ©΄μ„œ μ™„μ „ν•œ 문이기도 ν•©λ‹ˆλ‹€.
  • ν‘œν˜„μ‹μ˜ 문은 κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” 문이며, ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문은 κ°’μœΌλ‘œ 평가될 수 μ—†λŠ” 문을 λ§ν•©λ‹ˆλ‹€.
var foo = var x; //Uncaught SyntaxError: Unexpected token 'var'
// ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문은 κ°’μ²˜λŸΌ μ‚¬μš©ν•  수 μ—†λ‹€.

ν‘œν˜„μ‹μ„ 문으둜 λ³€ν™˜

2+2; // ν‘œν˜„μ‹ λ¬Έ
foo(); // ν‘œν˜„μ‹ λ¬Έ
  • 2 + 2λŠ” 식(Expression)μž…λ‹ˆλ‹€.
  • 식 끝에 μ„Έλ―Έμ½œλ‘ ;을 μΆ”κ°€ν•œ 2 + 2;λŠ” ν‘œν˜„μ‹ λ¬Έ(Expression Statement)μž…λ‹ˆλ‹€.
console.log(2+2;) // Error. μ„Έλ―Έμ½œλ‘ μ΄ μΆ”κ°€λœ λ¬Έ(Statement)은 값이 될 수 없기에 식(Expression)의 μžλ¦¬μ— 듀어가지 λͺ»ν•©λ‹ˆλ‹€.
λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€!