Bibi's DevLog ๐Ÿค“๐ŸŽ

[์ธํ”„๋Ÿฐ] Javascript์ž…๋ฌธ - ํ•จ์ˆ˜2 (ํ•จ์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’ return) ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Javascript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

[์ธํ”„๋Ÿฐ] Javascript์ž…๋ฌธ - ํ•จ์ˆ˜2 (ํ•จ์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’ return)

๋น„๋น„ bibi 2020. 10. 12. 23:14
* ์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜ธ๋ˆ…์Šค๋‹˜์˜ ์œ ๋ฃŒ ๊ฐ•์˜ '์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Javascript ์ž…๋ฌธ - ์ฝ”๋“œ์Šค์ฟผ๋“œ ๋งˆ์Šคํ„ฐ์ฆˆ ์ฝ”์Šค ๋ ˆ๋ฒจ1'๋ฅผ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ฐ•์˜ ๋‚ด์šฉ์— ๋”ํ•ด, ์ œ๊ฐ€ ํ•„๊ธฐํ•˜๊ณ  ๊ตฌ๊ธ€๋งํ•œ ๋‚ด์šฉ์ด ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด์ธ ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋Œ€๋กœ ์ •๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ๊ฐ์•ˆํ•ด ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ธํ”„๋Ÿฐ ์ธก ๋‹ต๋ณ€์„ ๋ฐ›์€ ์ ์ด ์žˆ์œผ๋‚˜(https://bibi6666667.tistory.com/37), ์ €์ž‘๊ถŒ์ƒ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค๋ฉด ๋ณดํ˜ธ ๋ชจ๋“œ(๋น„๊ณต๊ฐœ)๋กœ ์ „ํ™˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜์™€ ๋ฆฌํ„ด ๊ฐ’

 

๋ฆฌํ„ด ๊ฐ’์ด ์žˆ๋Š” ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ธฐ

๋ฆฌํ„ด ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
= ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๊ฑฐ๊ธฐ์— ๋ฆฌํ„ด ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

โ€ป ๋ฆฌํ„ด ๊ฐ’์€ ํ•˜๋‚˜๋งŒ ๋„ฃ์–ด ์ค„ ์ˆ˜ ์žˆ๋‹ค = ๋ฆฌํ„ด์€ ํ•œ ๊ฐœ์˜ ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
(๊ณ  ์ผ๋‹จ ์•Œ์•„๋‘๊ธฐ)

var five = function() {
	return 5; 
} 

// ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด ํ•จ์ˆ˜ ํ˜ธ์ถœํ•  ๋•Œ
five(); // 5

// ๋ฆฌํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
// (๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๊ฑฐ๊ธฐ์— ๋ฆฌํ„ด๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค)
var x = five();
x; // 5
console.log(x); // 5

 

(์•„๋ž˜ ๋‚ด์šฉ๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๊ธฐ)

 

์œ„์™€ ๋ฐ˜๋Œ€๋กœ,
๋ฆฌํ„ด์ด ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด?

 

๋ฆฌํ„ด์ด "์—†๋Š”" ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ์œผ๋ ค ํ•˜๋ฉด, undefined ๊ฐ€ ๋œฌ๋‹ค. (return์ด ์—†๊ธฐ ๋•Œ๋ฌธ)

์ •ํ™•ํ•œ return๊ฐ’์ด ์žˆ๋Š” ํ•จ์ˆ˜๋งŒ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

** ํ•จ์ˆ˜์— return๊ฐ’ ์—†์ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ๋งŽ์ด ํ•œ๋‹ค. ์ฃผ์˜ํ•˜์ž!

var foo = function() { 
	console.log('I am foo'); 
} 

foo(); // I am foo

var n = foo(); 
n; // undefined
// ํ•จ์ˆ˜ foo()๋Š” return๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜ n์— ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ.

var fool = function() {
	return "I am fool";
}

fool() ; // I am fool

var n = fool();
n; // I am fool
// ํ•จ์ˆ˜ fool()์€ return๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ n์— ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 


 

์•„๋ฌด ๊ฐ’๋„ ์—†๋Š” ๋ฆฌํ„ด ์‚ฌ์šฉํ•˜๊ธฐ : ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ

return; ์˜ ๋‘ ๋ฒˆ์งธ ์šฉ๋„
: ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ(ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ˜๋ณต๋ฌธ(๋ฃจํ”„)์˜ break;์™€ ๊ฐ™์€ ์šฉ๋„์ด๋‹ค.
var test1 = function(text) {
  if (text === "exit") {
  	return;
  } 
  console.log("๋ณด์ด๋‚˜์š”?"); 
}

test1("hoho"); // ๋ณด์ด๋‚˜์š”?
// ์กฐ๊ฑด๋ฌธ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์•„ ํ•จ์ˆ˜ test1 ์„ ๋‹ค ๋Œ์•˜๊ธฐ ๋•Œ๋ฌธ์— "๋ณด์ด๋‚˜์š”?"๊ฐ€ ์ฐํžŒ ๊ฒƒ.
test1("exit"); // undefined
// ์กฐ๊ฑด๋ฌธ์„ ๋งŒ์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ์ผ ๋•Œ ์‹คํ–‰๋˜๋Š” return;์„ ๋งŒ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ๋๋‚จ.
// ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— "๋ณด์ด๋‚˜์š”?" ๋Š” ์ฐํžˆ์ง€ ์•Š๋Š”๋‹ค.

 

 

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

  • ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง
  • ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ž˜ ํ•˜๊ฒŒ ๋จ

-> ์™•์ดˆ๋ณด ๋ ˆ๋ฒจ1 : ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์„ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค.
-> ์™•์ดˆ๋ณด ๋ ˆ๋ฒจ2 : ํ•จ์ˆ˜๋ฅผ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค.
-> ์™•์ดˆ๋ณด ๋ ˆ๋ฒจ3 : ๊ฐ์ฒด๋ฅผ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค. (ํด๋ž˜์Šค, ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ)
ํ•จ์ˆ˜๋ฅผ ์ž˜ ์‚ฌ์šฉํ•ด ์™•์ดˆ๋ณด ๋ ˆ๋ฒจ2 ํƒˆ์ถœํ•˜์ž!

 

ํ•จ์ˆ˜ ์–ด๋–ป๊ฒŒ (์ž˜) ๋งŒ๋“ค๊นŒ? 

  • ํ•จ์ˆ˜๋ฅผ ์“ธ ๋•Œ๋Š” '๋งค๊ฐœ ๋ณ€์ˆ˜'์™€ '๋ฆฌํ„ด'์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์ž.
  • ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ,
    ์ค„ ์ˆ˜๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊ธธ์–ด์ง€๋ฉด ํ•จ์ˆ˜๋กœ ๋นผ์ž. (์ฝ”๋“œ 10์ค„ ์ •๋„)
  • ์ธ๋ดํŠธindent(๋“ค์—ฌ์“ฐ๊ธฐ)๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊นŠ์–ด์ ธ๋„ ํ•จ์ˆ˜๋กœ ๋นผ์ž. (๋“ค์—ฌ์“ฐ๊ธฐ 3๋‹จ ์ •๋„)
  • ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ํ•˜์ž.
    ํ•œ ํ•จ์ˆ˜์—์„œ ๋‘ ๊ฐ€์ง€ ์ผ์„ ํ•œ๋‹ค(X)

 

(Option) 2์ค‘ ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋น ์ ธ ๋‚˜๊ฐ€๊ธฐ

- `break` ๋ช…๋ น์€ ํ•œ ๋ฒˆ์— ํ•œ ๋ฃจํ”„๋งŒ ๋น ์ ธ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
- ํ•จ์ˆ˜์˜ `return` ์„ ์ด์šฉํ•˜๋ฉด 2์ค‘ ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>test</h1>
<script>
    for (var i = 0; i < 100 ; i++) {
        for (var j = 0; j < 100 ; j++) {
            console.log(i, j);
            if (i === 5 && j === 3) {
                break;
            }
        }
    }
</script>
</body>
</html>

์œ„์™€ ๊ฐ™์€ ์ด์ค‘๋ฃจํ”„์—์„œ,
i=5, j=3์ด ๋˜์–ด break์— ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•ด๋„ ์ด์ค‘๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆœ ์—†๋‹ค.
break๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์ชฝ ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐˆ ๋ฟ, ๋ฐ”๊นฅ์ชฝ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋‚˜๋จธ์ง€ ๋ฐ˜๋ณต์„ ๊ณ„์†ํ•œ๋‹ค.

 

-> ์ด์ค‘๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š”
์ด์ค‘๋ฃจํ”„๋ฅผ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๊ณ , break; ๋Œ€์‹  return;์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์— ๊ทธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด return์„ ํ†ตํ•ด ํ•จ์ˆ˜๊ฐ€ ํ•œ ๋ฒˆ์— ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ค‘๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>test</h1>
<script>
    function hamsu() {
        for (var i = 0; i < 100; i++) {
            for (var j = 0; j < 100; j++) {
                console.log(i, j);
                if (i === 5 && j === 3) {
                    return;
                }
            }
        }
    }
    hamsu();
</script>
</body>
</html>