JS 기초 강의(ES5+) - # Function (4)

Minsoo·2021년 8월 12일
0

1. 함수 선언 Function declaration

  • function name(param1, param2) { body... return; }

  • one function === one thing

  • naming: doSomething, command, verb / e.g. createCardAndPoint -> createCard, createPoint

  • function is object in JS

    function printHello() {
      console.log('Hello'); //
    }
    printHello();
    
    function log(message) {
      console.log(message);
    }
    log('Hello@'); // -> [Hello@]
    log(1234); // -> [1234]

2. 파라미터 Parameters

  • primitive parameters: passed by value
  • object parameters: passed by reference
    function changeName(obj) {
      obj.name = 'coder';
    }
    const ellie = { name: 'ellie' };
    changeName(ellie);
    console.log(ellie); // -> [{name: "coder"}]

3. Default parameters (added in ES6)

  • function showMessage(message, from = 'unknown') {
      console.log(`${message} by ${from}`);
    }
    showMessage('Hi!'); // -> [Hi! by unknown]

4. Rest parameters (added in ES6)

  • function printAll(...args) {
      for (let i = 0; i < args.length; i++) {
        console.log(args[i]);
      }
    
      for (const arg of args) {
        console.log(arg);
      }
    
      args.forEach((arg) => console.log(arg));
    }
    printAll('dream', 'coding', 'ellie');

5. Local scope

  • let globalMessage = 'global'; // global variable
    function printMessage() {
      let message = 'hello';
      console.log(message); // local variable
      console.log(globalMessage);
      function printAnother() {
        console.log(message);
        let childMessage = 'hello';
      }
      console.log(childMessage); // -> [error]
    }
    printMessage();

6. Return a value

  • function sum(a, b) {
      return a + b;
    }
    const result = sum(1, 2); // 3
    console.log(`sum: ${sum(1, 2)}`); // -> [sum: 3]

7. Early return, early exit

  • 나쁜 예
    function upgradeUser(user) {
      if (user.point > 10) {
        // long upgrade logic...
      }
    }
  • 좋은 예
    function upgradeUser(user) {
      if (user.point <= 10) {
        return;
      }
      // long upgrade logic...
    }

0개의 댓글

관련 채용 정보