영광의 시대!/2022 개발자의 품격 부트캠프 1기

[개발자의품격][부트캠프][1기][9차시] JavaScript 주요 포인트 #9 | 고급 문법 - this, Scope, Default Function Parameter, Rest Parameter, Arrow Function, Template Literals

DandyNow 2022. 2. 5. 09:39
728x90
반응형

JavaScript 주요 포인트 #9

this 키워드

this 키워드는 사용되는 위치에 따라 바인딩되는 객체가 달라진다.

this와 Window 객체

// this에 Window 객체가 바인딩 된 경우
<script>
  // this 키워드가 Window 객체인 경우, Window 객체 관련 모든 내장 함수 사용 가능하다.
  console.log(this); // Window(this는 Window 객체)

  function myFunction() {
    console.log(this); // this는 함수 내 Window 객체
  }
  myFunction(); // Window
</script>

 

this와 DOM 요소

<!-- this에 DOM 요소가 바인딩 된 경우 -->
<!-- 호출하는 함수에 this 파라미터로 전달하면, this는 클릭 이벤트가 발생한 <button> 태그 그 자체가 된다. -->
<button onclick="callFunction(this)">클릭</button>

<!-- 호출하는 함수에 this 파라미터로 전달하면, this는 onchange 이벤트가 발생한 <select> 태그 그 자체가 된다. -->
<select name="" id="" onchange="callFunction(this)">
  <!-- html 요소에서 this는 그 html 돔요소 자체 -->
  <option value="1">A</option>
  <option value="2">B</option>
  <option value="3">C</option>
</select>
<script>
  // HTML DOM 요소에서 호출할 함수
  function callFunction(obj) {
    console.log(obj);
  }
</script>

 

this와 object

// this에 object가 바인딩 된 경우
<script>
  // object 안에서의 함수의 this는 object 자체를 가리킨다.
  let person = {
    firstName: "Jhon",
    lastName: "Doe",
    getFullName: function () {
      return this.firstName + " " + this.lastName;
    },
  };
  console.log(person.getFullName()); // Jhon Doe
</script>

object 내에 함수를 정의할 수 있고, 함수가 object 내에 정의된 다른 키에 접근할 때 this 키워드를 사용한다. 이러한 방식은 object 내에 이미 정의된 키로 새로운 데이터를 만들고자 할 때 많이 사용한다.

 


 

Scope

선언된 변수에 대한 접근성을 의미한다.

<script>
  // Scope, 선언된 변수에 대한 접근성을 의미한다.
  // 자식에서 부모의 변수는 접근할 수 있다. 따라서 함수 안에서 함수 밖의 변수에 접근 가능하다.
  let carName = "볼보";
  function myFunction() {
    let carName = "기아차";
    console.log(carName); // 기아차(변수명이 같을 경우, 함수 밖의 "볼보"에 접근할 수 있지만 우선순위가 높은 "기아차"를 출력한다.)
  }
  myFunction();

  console.log(carName); // 볼보(함수 밖에서는 함수 내의 변수에 접근할 수 없다.)
</script>

 


 

Default Function Parameter

함수 호출 시 인자를 넣지 않은 경우에 대한 기본값을 적용한다. 파라미터 값이 전달되지 않아 생기는 오류를 미연에 방지할 수 있다.

// default function parameter
<script>
  function log(msg) {
    console.log(msg);
  }

  // Default function parameter 미적용
  log("콘솔에 출력합니다."); // 콘솔에 출력합니다.
  log(); // undefined(인자를 넣지 않은 경우)

  // Default function parameter 적용
  function convertDateFormat(format = "YYYY-MM-DD") {
    let today = new Date();
    let year = today.getFullYear();
    let month = (today.getMonth() + 1).toString().padStart(2, 0);
    let day = today.getDate().toString().padStart(2, 0);

    let formatDate = format
      .replace("YYYY", year)
      .replace("MM", month)
      .replace("DD", day);

    console.log(formatDate);
  }

  // 인자를 넣지 않아도 지정한 기본값(디폴트 파라미터)이 적용된다.
  convertDateFormat(); // 2022-02-05(디폴트 파라미터인 YYYY-MM-DD 적용됨)
  convertDateFormat("YYYY-MM-DD"); // 2022-02-05
  convertDateFormat("MM-DD-YYYY"); // 02-05-2022
  convertDateFormat("DD-MM-YYYY"); // 05-02-2022
</script>

 


 

Rest Parameter

Rest Parameter는 실무에서 많이 사용한다. 함수 호출 시 파라미터 값의 개수에 상관없이 인자를 넣을 수 있다.  인자 값은 배열로 저장된다. 

<script>
  // Rest Parameter 미적용
  function sum(n1, n2) {
    return n1 + n2;
  }
  function sum2(n1, n2, n3) {
    return n1 + n2;
  }
  function sum3(n1, n2, n3, n4) {
    return n1 + n2;
  }
  console.log(sum(5, 7)); // 12

  // Rest Parameter 적용
  function add(...nums) {
    let total = 0;
    console.log(nums); // [5, 6, 7, 8, 9]
    for (const n of nums) {
      total += n;
    }
    return total;
  }
  console.log(add(5, 6, 7, 8, 9)); // 35
</script>

 


 

Arrow Function

화살표 함수는 함수를 정의하는 새로운 방법이다. 실무에서 많이 사용하므로 반드시 익숙해져야 한다.

// Arrow Function(화살표 함수)
<script>
  // 함수 선언식
  function hello(name) {
    return "Hello " + name;
  }
  console.log(hello("hello")); // Hello hello

  // 함수 표현식
  const hello2 = function (name) {
    return "Hello " + name;
  };
  console.log(hello2("hello2")); // Hello hello2

  // Arrow Function(화살표 함수)
  // function 생략 가능
  const hello3 = (name) => {
    return "Hello " + name;
  };
  console.log(hello3("hello3")); // Hello hello3

  // Arrow Function(화살표 함수) - () 생략 가능
  const hello4 = name => {
    return "Hello " + name;
  };
  console.log(hello4("hello4")); // Hello hello4

  // Arrow Function(화살표 함수) - {} 생략가능
  const hello5 = name => "Hello " + name; // 실무에서는 이 표현을 사용한다. 익숙해 져야 한다.
  console.log(hello5("hello5")); // Hello hello5
</script>

 


 

Template Literals

문자열 안에 변수를 바로 넣을 수 있다.

// Template Literals
<script>
  function hello(firstName, lastName) {
    console.log("Hello " + firstName + ", " + lastName + ". Welcome!"); // 기존 문자열 결합 방식
    console.log(`Hello ${firstName}, ${lastName}. Welcome!`); // Template Literals 방식(``는 백틱이라고 부른다.)
  }
  hello("길동", "홍"); // Hello 길동, 홍. Welcome!, Hello 길동, 홍. Welcome!
</script>

 



"어디 등짝을 바닥에 붙일 생각을 하는가?" 좋은 개발자는 자기가 짠 코드의 길이 만큼 성장한다. 좋은 도반에서 함께 공유할 때 더 빨리 성장할 수 있다!

 

728x90
반응형