1.  ํ•จ์ˆ˜ function

๐Ÿฐ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹จ์ˆœํžˆ ๋™์ž‘ ํ•˜๋‚˜๋งŒ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋™์ž‘์ด ์—ฐ๊ฒฐ๋œ๋‹ค

๐Ÿฐ  ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•  ๋ชฉ์ ๋Œ€๋กœ ๋ฌถ์€ ๋ช…๋ น์„ ํ•จ์ˆ˜ function (= ์ฝ”๋“œ์˜ ์ง‘ํ•ฉ) ์ด๋ผ ํ•จ

๐Ÿฐ  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋ช…๋ น์˜ ์‹œ์ž‘๊ณผ ๋์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๊ณ ,

      ๋ฌถ์€ ๊ธฐ๋Šฅ์— ์ด๋ฆ„์„ ๋ถ™์—ฌ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๐Ÿ’ก  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 
    1. ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ •๋ฆฌํ•ด๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ๋ฐ˜๋ณต ์ž‘์—…์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค
    2. ๊ธด ํ”„๋กœ๊ทธ๋žจ์„ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ  ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ•˜๋ฉด ๋ชจ๋“ˆํ™”๋กœ ์ „์ฒด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
    3. ๊ธฐ๋Šฅ๋ณ„(ํ•จ์ˆ˜๋ณ„)๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

๐Ÿ’ก  ์šฉ์–ด ์ •๋ฆฌ
    ·  ํ•จ์ˆ˜ ์ •์˜ : ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ๊ฒƒ
    ·  ํ•จ์ˆ˜ ํ˜ธ์ถœ : ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    ·  ์ธ์ˆ˜ : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ด„ํ˜ธ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž๋ฃŒ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ
    ·  ๋งค๊ฐœ๋ณ€์ˆ˜ : ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์ „๋‹ฌ๋ฐ›์„ ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ
    ·  ๋ฆฌํ„ด ๊ฐ’ : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ

1)  ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’

 

๐Ÿฏ  ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’์€ ํ•จ์ˆ˜์˜ ํ•„์ˆ˜ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๊ณ , ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ

/* ๊ธฐ๋ณธํ˜• */
function ํ•จ์ˆ˜๋ช… (๋งค๊ฐœ๋ณ€์ˆ˜1, ๋งค๊ฐœ๋ณ€์ˆ˜2, ... ๋งค๊ฐœ๋ณ€์ˆ˜n) {
    ๋ฌธ์žฅ;
    ๋ฌธ์žฅ;
    return ๋ฆฌํ„ด๊ฐ’;
}
<script>
    const f = function (x) {
        return x * x;
    }

    // ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    console.log(f(3)); // 9. ๋งค๊ฐœ๋ณ€์ˆ˜ x์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ˆ˜๊ฐ€ 3์ด๊ณ  ๋ฆฌํ„ด๊ฐ’์ด 9.
    console.log(f()); // NaN
</script>

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ธ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์Œ 
<script>
    const test1st = function (a) {
        console.log(a);
    }
    
    test1st(); // undefined
    test1st(1); // 1
    test1st(1, 2); // 1
    test1st(1, 2, 3); // 1
</script>

 

๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜ ์ •์˜๋ฌธ
<script>
    const myFunc = function (name, area) {
        document.write('์•ˆ๋…•ํ•˜์„ธ์š”. ' + name + '์ž…๋‹ˆ๋‹ค.', '<br>');
        document.write('์‚ฌ๋Š”๊ณณ์€ ' + area + '์ž…๋‹ˆ๋‹ค.', '<br><br>');
    };
    myFunc('ํ™๋‹น๋ฌด', '์„œ์šธ');
    myFunc('๊น๋‘๊ธฐ', '๋ถ€์‚ฐ');
</script>


2)  return ๋ฌธ


๐Ÿฏ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ฐ•์ œ ์ข…๋ฃŒ
๐Ÿฏ  return์˜ ์—ญํ•   1) ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜   2) ํ•จ์ˆ˜์˜ ๊ฐ•์ œ ์ข…๋ฃŒ (๋ฐ˜ํ™˜๊ฐ’์ด ์—†์–ด๋„ ๋จ)

 

๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
<script>
    const getAvg = function (arrData) {
        let sum = 0;
        for(let i = 0; i < arrData.length; i++) {
            sum += Number(prompt(`${arrData[i]} ์ ์ˆ˜๋Š” ?`, `0`));
        }

        const avg = sum / arrData.length;
        return avg;
        //alert(avg); // return ์ดํ›„์˜ ์ฝ”๋“œ๋ผ์„œ ์‹คํ–‰์ด ์•ˆ๋จ. (Unreachable code)
    }

    const arrSubject = ['๊ตญ์–ด', '์ˆ˜ํ•™', '์˜์–ด'];
    const result = getAvg(arrSubject);

    document.write(`ํ‰๊ท  ์ ์ˆ˜๋Š” ${result}์  ์ž…๋‹ˆ๋‹ค.`);
</script>

๊ฐ•์ œ ์ข…๋ฃŒ
<head>
<style>
        * {
            padding: 0;
            margin: 0;
        }

        #galleryZone {
            text-align: center;
        }
</style>
<script>

    let num = 1;
    const showGallery = function (direction) {
    /*
    ๋‹ค์Œ์„ ํด๋ฆญํ•œ ๊ฒฝ์šฐ pic_1.jpg -> pic_2.jpg : ๋ฒˆํ˜ธ๊ฐ€ ์ฆ๊ฐ€
    ์ด์ „์„ ํด๋ฆญํ•œ ๊ฒฝ์šฐ pic_9.jpg -> pic_8.jpg : ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ์†Œ
    */
    if  (direction === 1) { // ๋‹ค์Œ์„ ํด๋ฆญํ•œ ๊ฒฝ์šฐ
        if (num === 9) {
            alert('๋งˆ์ง€๋ง‰ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค');
            return; // ์ด๋ฏธ์ง€๊ฐ€ 9๊ฐœ์ธ ๊ฒฝ์šฐ num์ด 9์ธ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ์ข…๋ฃŒ
        }
         num++;
    } else { // ์ด์ „์„ ํด๋ฆญํ•œ ๊ฒฝ์šฐ
        if (num === 1) {
            alert('์ฒซ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.');
            return; // ์ฒซ ์ด๋ฏธ์ง€๊ฐ€ 1๋ฒˆ์ด์–ด์„œ ์ข…๋ฃŒ
         }
         num--;
    }
    const imgTag = document.getElementById('photo'); // id ๊ฐ’์ด photo์ธ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ด
    imgTag.setAttribute('src', 'images/pic_' + num + '.jpg'); // id ๊ฐ’์ด photo์ธ ์š”์†Œ์˜ src ์†์„ฑ์„ ๋ณ€๊ฒฝ
    }
</script>
</head>
<body>
    <div id ="galleryZone">
        <p><img src="./images/pic_1.jpg" id="photo" alt=""></p>
        <p>
            <button onclick="showGallery(0)">์ด์ „</button>
            <button onclick="showGallery(1)">๋‹ค์Œ</button>
        </p>
    </div>
</body>

 

 


2.  ์ต๋ช… ํ•จ์ˆ˜ ์„ ์–ธํ•˜๊ธฐ

 ๐Ÿฐ  ์ต๋ช… ํ•จ์ˆ˜ anonymous function : ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜

 ๐Ÿฐ  ์ต๋ช…ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ(ํ•จ์ˆ˜ ์ •์˜) ํ›„ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
 ๐Ÿฐ  ์ต๋ช…ํ•จ์ˆ˜๋Š” ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ. let๊ณผ const์˜ ํŠน์ง•

๊ธฐ๋ณธํ˜• : function () {}
<!-- ๋ณ€์ˆ˜ ํ• ๋‹น --> 
let ๋ณ€์ˆ˜ = function () {
    ์‹คํ–‰๋ฌธ;
}

 

<script>
    // ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹น.
    const func = function () {
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 1');
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 2');
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 3');
        console.log('');
    }

    // ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    func();
    func();

    // ์ถœ๋ ฅ
    console.log(typeof func); // function. ํ•จ์ˆ˜์˜ ์ž๋ฃŒํ˜• ํ™•์ธ
    console.log(func); // ํ•จ์ˆ˜ ์ž์ฒด๋„ ๋‹จ์ˆœํ•œ ์ž๋ฃŒ์ด๋ฏ€๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Œ.
</script>

 

<script>
    /* ์„ ์–ธ ์ „ ํ˜ธ์ถœ์‹œ */
    compute(); // Uncaught ReferenceError: Cannot access 'compute' before initialization
    let compute = function() {
        let x = 10;
        let y = 100;
        let result = x * y;
        console.log(result);
    };
    compute(); // 1000
</script>
<script>
    /* ์žฌ์„ ์–ธ ์‹œ */
    let compute = function() {
        let x = 10;
        let y = 100;
        let result = x * y;
        console.log(result);
    }; // Uncaught SyntaxError: Identifier 'compute' has already been declared 
</script>

 


3.  ์„ ์–ธ์  ํ•จ์ˆ˜ 

๐Ÿฐ  ์„ ์–ธ์  ํ•จ์ˆ˜ : ์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜

๐Ÿฐ  ์„ ์–ธ์  ํ•จ์ˆ˜๋Š” ์žฌ์ •์˜ ๊ฐ€๋Šฅ

 ๊ธฐ๋ณธํ˜• : function ํ•จ์ˆ˜ ์ด๋ฆ„ () {}


   โœ๏ธ  ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์„ ์–ธ์  ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜(C),

         ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ๋ณด์กฐ์ ์ธ ์ˆ˜๋‹จ(C++, ์ž๋ฐ”์˜ ๋žŒ๋‹ค)์œผ๋กœ ์‚ฌ์šฉ
   โœ๏ธ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ(ECMA script 6 ์ดํ›„)์ด๋ผ์„œ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜,
         ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ๋ณด์กฐ์ ์ธ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•จ.

 

<script>
    // ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑ
    function func1st () {
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 1');
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 2');
        console.log('ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ... 3');
        console.log('');
    }

    // ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    func1st();
    func1st();

    // ์ถœ๋ ฅ
    console.log(typeof func1st); // function
    console.log(func1st);
</script>


๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
 -  ์„ ์–ธ์  ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋’ค์— ์„ ์–ธ๋œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋จ
<script>
    let num = 100;
    function menu() {
        num += 100;
        document.write(num, ": ์•ž์˜ ํ•จ์ˆ˜ ์‹คํ–‰<br>");
    }
    menu(); // 100: ๋’ค์˜ ํ•จ์ˆ˜ ์‹คํ–‰

    function menu() {
        document.write(num, ": ๋’ค์˜ ํ•จ์ˆ˜ ์‹คํ–‰<br>");
    }
</script>

 

๐Ÿ’ก  ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ• 
      1. ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด์„œ ์„ ์–ธ์  ํ•จ์ˆ˜ ์„ ์–ธ
            โžก๏ธ  ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด์„œ ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ต๋ช…ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌ
      2. ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ ํ›„์— ๋ณ€์ˆ˜์— ํ• ๋‹น

 

<script>
    // 1. ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด์„œ ์„ ์–ธ์  ํ•จ์ˆ˜ ์„ ์–ธ
    const func2nd = function namedFunc2nd() { // ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹น
        console.log('namedFunc2nd() ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ...');
        console.log('');
    }

    // ํ˜ธ์ถœ
    func2nd(); // ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ.
    // namedFunction(); // Uncaught ReferenceError: namedFunction is not defined\
    console.log(typeof func2nd); // function. ํ•จ์ˆ˜์˜ ์ž๋ฃŒํ˜• ํ™•์ธ

    // 2. ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ ํ›„์— ๋ณ€์ˆ˜์— ํ• ๋‹น
    function namedFunc() {
        console.log('namedFunc() ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค ...');
        console.log('');
    }
    const func1st = namedFunc; // ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹น.

    func1st(); // ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ
    namedFunc(); // ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    console.log(typeof func1st); // function. ์ž๋ฃŒํ˜• ํ™•์ธ
</script>

 


4.  ํ˜ธ์ด์ŠคํŒ…  Hoisting

๐Ÿฐ  var๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜ or ์„ ์–ธ์  ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์ด์ „์— ํ˜ธ์ถœํ•˜์—ฌ๋„ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
๐Ÿฐ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ๋Š” ์†Œ์Šค๋ฅผ ํ›‘๊ณ  var๋ฅผ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜๋Š” ์‹คํ–‰ํ•˜๊ธฐ์ „์— ๊ธฐ์–ตํ•ด ๋‘๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค

<script>
    compute(); // 110. ์„ ์–ธ์  ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜ ์ „์— ์‚ฌ์šฉ๊ฐ€๋Šฅ.
    function compute() {
        let x = 10;
        let y = 100;
        let result = x + y;
        console.log(result);
    }
    compute(); // 110
</script>

 

 

 

 

 

[ ๋‚ด์šฉ ์ฐธ๊ณ  : IT ํ•™์› ๊ฐ•์˜ ๋ฐ ์ฑ… 'Do it HTML+CSS+์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์›น ํ‘œ์ค€์˜ ์ •์„' ]

+ Recent posts