방명록
- [개발자의품격][부트캠프][1기][9차시] JavaScript 주요 포인트 #9 | 고급 문법 - this, Scope, Default Function Parameter, Rest Parameter, Arrow Function, Template Literals2022년 02월 05일 09시 39분 01초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
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반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글