Skip to content

Latest commit

ย 

History

History
142 lines (87 loc) ยท 4.22 KB

expression-vs-statement.md

File metadata and controls

142 lines (87 loc) ยท 4.22 KB

Expression vs Statement

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” expression๊ณผ statement๋ผ๋Š” ์ฃผ์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๊ตฌ๋ฌธ ์นดํ…Œ๊ณ ๋ฆฌ(syntactic categories)๊ฐ€ ์žˆ๋‹ค.

expression์€ statement์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ statement๋Š” expression์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.


Expression and Statement

Expression

expression์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌ๋ฌธ ์ฆ‰, ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ์‹์ด๋‹ค.

2 + 2 * 3 / 2

(Math.random() * (100 - 20)) + 20

1+1, 2+2, 3+3
// "," ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ํ‘œํ˜„์‹์„ ๋‚˜์—ด ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹์˜ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

expression์€ state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ์˜ expression์—์„œ assignedVariable์ด๋ผ๋Š” state์— +, - ์—ฐ์‚ฐ์„ ํ–ˆ์ง€๋งŒ ํ•ด๋‹น ์—ฐ์‚ฐ์€ ๋ฐ˜ํ™˜ ๊ฐ’์—๋งŒ ์˜ํ–ฅ์„ ์ค„ ๋ฟ ์‹ค์ œ assignedVariable ๊ฐ’์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

const assignedVariable = 2; // statement, assignedVariable์€ state
assignedVariable + 4 // expression, 
assignedVariable - 10 // expression

console.log(assignedVariable) // 2
3 * 3 // expression

function multiply(n1, n2) {
	n1 * n2;
}

const result = multiply(3, 3); //expression, undefined

// multiply(3,3)์€ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์ด ๋˜ํ•œ ํ‘œํ˜„์‹์ด๋‹ค.

Statement

statement๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ด์ž ์ตœ์†Œ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค. ๋˜ํ•œ statement๋Š” ๊ฐ’์ด ํ•„์š”ํ•œ ๊ณณ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š” ๋ช…๋ น์ด๋‚˜ ์ง€์‹œ ๊ตฌ๋ฌธ์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, statement๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž, ํ• ๋‹น ์‹œ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„, ํ”ผ์—ฐ์‚ฐ์ž, ๋ฐ˜ํ™˜ ๊ฐ’ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋‹ค.

console.log(if(true) {3+3}); 
// Uncaught SyntaxError: Unexpected token 'if'

์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ˜์†”์— ์œ„ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ ํ›„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์ฝ˜์†”์— ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ ๋  ๊ฒƒ์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ statement์˜ ์ข…๋ฅ˜ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • if
  • if-else
  • while
  • do-while
  • for
  • switch
  • for-in
  • with(deprecated)
  • debugger
  • variable declaration

Expression statement

expression statement๋Š” statement์ง€๋งŒ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” expression์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” statement๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

let x; // ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ expression์ด ์•„๋‹Œ statment์ด๋‹ค.

x = 1 + 2; // ๊ฐ’์œผ๋กœ ํ‰๊ฐ€ ๋  ์ˆ˜ expression์ด๋ฉด์„œ statement์˜ ์กฐ๊ฑด๋„ ๋งŒ์กฑํ•œ๋‹ค.

const y = x = 3; // expression statemet๋Š” ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

Function

Function Declaration

function declaration์ด๋ž€ function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ์„ ์–ธ์‹์ด๋‹ค.

function declaration์œผ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜๋Š” ํ–ฅํ›„ ์‚ฌ์šฉ์„ ์œ„ํ•ด(saved for later use) ์ €์žฅ ๋˜์—ˆ๋‹ค๊ฐ€, ํ˜ธ์ถœ ๋  ๋•Œ ์‹คํ–‰๋œ๋‹ค. ๋˜ํ•œ function declaration์œผ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ๋˜๊ธฐ ์ „ ๋กœ๋“œ(ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…)๋œ๋‹ค.

alert(foo()); // Alerts 5

function foo() { return 5; }

// function foo()๋Š” function declaration์ด๋ฏ€๋กœ ํ˜ธ์ด์ŠคํŒ…๋˜์–ด ํ•จ์ˆ˜ ์„ ์–ธ์ด ํ˜ธ์ถœ๋ณด๋‹ค ๋’ท ๋ผ์ธ์— ์œ„์น˜ํ•˜๋”๋ผ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

Function Expression

function expression์€ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ์„ ์–ธ์ด๋‹ค.

function exrpression์€ ๋ณ€์ˆ˜์— ์ €์žฅ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ €์žฅ๋œ ํ›„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

Function declaration๊ณผ ๋‹ฌ๋ฆฌ function expression์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

alert(foo()); // Uncaught ReferenceError: foo is not defined

const foo = function () { return 5; }
alert(foo()); // Uncaught ReferenceError: foo is not defined

const foo = () => 5;

๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์‚ฌ์šฉ, ํด๋กœ์ €, ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜(IIFE) ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” function declaration๋ณด๋‹ค function expression์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์šฉํ•˜๋‹ค.




Reference