DEVELOP

01. 함수를 만드는 방법 

함수 선언(function declaration)

: 가장 일반적인 방법, function 키워드를 통해 함수를 선언하는 방식

// 함수 선언
function sayHi() {
  console.log('Hi!');
}

 


03. 이름이 있는 함수 표현식 

함수 표현식 (function expression)

: 변수에 할당해서 함수를 선언

// 함수 표현식
const sayHi = function () {
  console.log('Hi!');
};

 


05. 값으로서 함수

- 자바스크립트에서 함수는 값으로 취급

// 변수에 할당해서 활용
const printJS = function () {
  console.log('JavaScript');
};

// 객체의 메소드로 활용
const codeit = {
  printTitle: function () {
    console.log('Codeit');
  }
}

// 콜백 함수로 활용
myBtn.addEventListener('click', function () {
  console.log('button is clicked!');
});

// 고차 함수로 활용
function myFunction() {
  return function () {
    console.log('Hi!?');
  };
};

07. Parameter

- 자바스립트에서 함수의 파라미터는 기본값을 가질 수 있음

- 기본값이 있는 파라미터는 함수를 호출할 때 아규먼트를 전달하지 않으면, 함수 내부의 동작은 이 파라미터의 기본값을 가지고 동작

function sayHi(name = 'Codeit') {
  console.log(`Hi! ${name}`);
}

sayHi('JavaScript'); // Hi! JavaScript
sayHi(); // Hi! Codeit

09. arguments

arguments 객체

  : 함수를 호출할 때 전달한 아규먼트들을 배열의 형태로 모아둔 유사 배열 객체

- 함수를 호출할 때 전달되는 아규먼트의 개수가 불규칙적일 때 유용하게 활용

- arguments 객체를 활용하고자 한다면 함수 안에서 사용할 파라미터나 변수, 함수의 이름을 arguments라고 짓는 것은 피해야 함

function printArguments() {
  // arguments 객체의 요소들을 하나씩 출력
  for (const arg of arguments) {
    console.log(arg); 
  }
}

printArguments('Young', 'Mark', 'Koby');

Rest Parameter

- 파라미터 앞에 마침표 세 개를 붙여주면, 여러 개로 전달되는 아규먼트들을 배열로 다룰 수가 있음

- arguments객체는 유사 배열이기 때문에 배열의 메소드를 활용할 수 없는 반면, rest parameter는 배열이기 때문에 배열의 메소드를 자유롭게 사용할 수 있음

function printArguments(...args) {
  // args 객체의 요소들을 하나씩 출력
  for (const arg of args) {
    console.log(arg); 
  }
}

printArguments('Young', 'Mark', 'Koby');

- rest parameter는 다른 일반 파라미터들과 함께 사용될 수 있음

function printRankingList(first, second, ...others) {
  console.log('코드잇 레이스 최종 결과');
  console.log(`우승: ${first}`);
  console.log(`준우승: ${second}`);
  for (const arg of others) {
    console.log(`참가자: ${arg}`);
  }
}

printRankingList('Tommy', 'Jerry', 'Suri', 'Sunny', 'Jack');

- 앞에 정의된 파라미터에 argument를 먼저 할당하고 나머지 argument를 배열로 묶는 역할

- 일반 파라미터와 함께 사용할 때는 반드시 가장 마지막에 작성해야 함


10. 줄임말 대잔치

function firstWords() {
  let word = '';

  for(i = 0; i<arguments.length; i++){
    word +=arguments[i][0];
  }

  console.log(word);
}

firstWords('나만', '없어', '고양이');
firstWords('아니', '바나나말고', '라면먹어');
firstWords('만두', '반으로', '잘라먹네', '부지런하다');
firstWords('결국', '자바스크립트가', '해피한', '지름길');
firstWords('빨간색', '주황색', '노란색', '초록색', '파란색', '남색', '보라색');

12. 1세대는 거르는게 답?

function ignoreFirst(...rest){
  rest.shift();
  for(i of rest){
    console.log(i);
  }
}
ignoreFirst('1세대', '2세대', '3세대');
ignoreFirst('곰팡이', '강아지', '고양이');
ignoreFirst(20, 9, 18, 19, 30, 34, 40);
function ignoreFirst(first,...rest){
  for(i of rest){
    console.log(i);
  }
}
ignoreFirst('1세대', '2세대', '3세대');
ignoreFirst('곰팡이', '강아지', '고양이');
ignoreFirst(20, 9, 18, 19, 30, 34, 40);

13. Arrow Function

arrow function

: 익명 함수를 좀 더 간결하게 표현할 수 있도록 ES2015에서 새롭게 등장한 함수 선언 방식

- 표현식으로 함수를 정의할 때 활용될 수도 있고 콜백 함수로 전달할 때 활용할 수도 있음

- arguments 객체가 없고, this가 가리키는 값이 일반 함수와 다름

// 화살표 함수 정의
const getTwice = (number) => {
  return number * 2;
};

// 콜백 함수로 활용
myBtn.addEventListener('click', () => {
  console.log('button is clicked!');
});

- 화살표 함수는 다양한 상황에 따라 축약형으로 작성

// 1. 함수의 파라미터가 하나 뿐일 때
const getTwice = (number) => {
  return number * 2;
};

// 파라미터를 감싸는 소괄호 생략 가능
const getTwice = number => {
  return number * 2;
};

// 2. 함수 동작 부분이 return문만 있을 때
const sum = (a, b) => {
  return a + b;
};

// return문과 중괄호 생략 가능
const sum = (a, b) => a + b;

15. what is this?

- 웹 브라우저에서 this가 사용될 때는 전역 객체, Window 객체를 가지게 됨

- 객체의 메소드를 정의하기 위한 함수 안에선 메소드를 호출한 객체를 가리키게 됨

const user = {
  firstName: 'Tess',
  lastName: 'Jang',
  getFullName: function () {
    return `${this.firstName} ${this.lastName}`;
  },
};

console.log(user.getFullName()); // getFullName 안에서의 this는 getFullName을 

16. this 익히기

function printThisTitle() {
  console.log(this.title);
}

const courseA = {
  title: '프로그래밍 기초 in JavaScript',
  printTitle: printThisTitle,
};

const courseB = {
  title: '컴퓨터 개론',
  printTitle: courseA.printTitle,
};

const courseC = {
  title: '웹 퍼블리싱',
  printTitle: courseB.printTitle,
};

courseA.printTitle(); // 프로그래밍 기초 in JavaScript
courseB.printTitle(); // 컴퓨터 개론
courseC.printTitle(); // 웹 퍼블리싱
profile

DEVELOP

@JUNGY00N