21. 함수 예고
함수: 많아지고 복잡해진 코드를 정리정돈하는 용도
동일한 JavaScript를 실행하는 버튼이 많아지면 해당 JavaScript를 모든 버튼에서 동일하게 유지하거나 일괄적으로 수정하기 어렵다.
→ 중복된 JavaScript 코드를 함수로 만들어서 실행.
함수는 다음과 같이 정의한 뒤 사용할 수 있다.
- 세부적인 사항은 이후 강의에서 설명
/* 함수를 정의 */
/* 이전에 onclick의 속성 값으로 입력했던 코드를 잘라내서 붙여 넣는다*/
function nightDayHandler(self) {
var target = document.querySelector('body')
if(self.value === night) {
target.style.backgroundColor = 'black';
target.style.color = 'white';
self.value = 'day'
}
var alist = document.querySelectorAll('a');
var i = 0;
while(i < alist.length) {
alist[i].style.color = 'powderblue';
i = i + 1;
}
/* day인 경우에 대해서도 작성 */
else {...}
}
<!-- 함수를 호출 -->
<input id = "night_day" type = "button" value = "night"
onclick = "nightDayHandler(this);">
함수를 사용하면 다음과 같은 이점이 있다.
- 반복되는 코드의 양을 줄일 수 있다.
- 동일한 기능에 대해서 동일한 코드를 유지할 수 있다.
- 반복되는 기능을 일괄적으로 수정하기에 용이하다.
- 함수 이름을 지정하면 기능을 직관적으로 파악하기 쉽다.
22. 함수
함수의 기본
함수는 사용하기 위한 문법을 보면,
/* 함수를 정의 */
/* function 함수명의 형태로 적은 뒤 {}안에 코드를 입력 */
function two() {
document.write('<li>2-1</li>')
document.write('<li>2-2</li>')
}
/* 함수 호출(사용) */
document.write('<li>1</li>');
/* list 2-1, 2-2를 출력 */
two();
document.write('<li>3</li>');
/* list 2-1, 2-2를 다시 출력 */
two();
매개변수(parameter)와 인자(argument)
함수는 입력에 따라 출력을 내어준다는 것에서 자판기와 비슷한다.
함수는 인자(argument)를 매개변수(parameter)로 입력 받아서 결과값(result) 내어준다.
이전까지는 별도의 입력값 없이 함수를 실행
/* 1 + 1 만 수행해서 2를 출력하는 함수 */
function onePlusOne() {
document.write(1 + 1);
}
/* 함수 실행 */
onePlusOne();
매개변수를 이용하면 값을 직접 입력해서 더한 결과를 출력할 수 있다.
/* 더하고 싶은 두 수를 left, right라는 매개변수로 가져오는 함수 */
function sum(left, right) {
/* left와 right를 더한 값을 출력 */
document.write(left + right);
}
/* 2와 3을 더하는 함수. 5출력 */
/* 함수 호출시 함수로 전달하는 값을 인자라고 한다 */
sum(2, 3);
/* 3과 4를 더하는 함수. 7출력 */
sum(3, 4);
더한 결과를 '출력'만 하지 않고 다양한 방법을 사용하고 싶으면 return
을 이용해서 함수가 결과 값을 대변할 수 있게 한다.
function sum2(left, right) {
/* left + right를 출력하지 않고 return */
return left + right;
}
/* sum2(left,right)를 left + right의 표현식처럼 사용할 수 있다 */
/* 5(=2 + 3)를 출력 */
document.write(sum2(2, 3))
/* 5에 <div>태그로 효과를 주면서 출력 */
document.write('<div style = "color: red;">' + sum2(2, 3) + '</div>')
return
이 없다면 예시같이 새로운 기능을 따로 쓰고싶을 때 마다 함수를 새로 정의해야 한다.
23. 함수의 활용
함수를 이용해서 night & day handler 리팩토링 할 수 있다.
-
적절한 이름을 사용해서 함수를 정의한다.
function nightDayHanler() {}
-
함수로 만들고 싶은 코드(
onclick
의 속성값)를 함수 내에 붙여넣는다.- 코드의 this는 현재 코드가 속해있는 요소를 가리킨다.
onclick
의 속성값으로 있을 때는this
가 버튼을 가리켰으나 따로 빼서 함수를 만들면 더 이상 버튼을 가리키지 않는다.
/* this대신 매개변수 self를 받아 사용하고 */ function nightDayHandler(self) { var target = document.querySelector('body') if(self.value === night) { target.style.backgroundColor = 'black'; target.style.color = 'white'; self.value = 'day' } var alist = document.querySelectorAll('a'); var i = 0; while(i < alist.length) { alist[i].style.color = 'powderblue'; i = i + 1; } /* day인 경우에 대해서도 동일하게 작성 */ else {...} }
<!-- 버튼에서 함수를 호출하면서 this를 매개변수의 인자로 보내면 해결 가능하다 --> <input type = "button" value = "night" onclick = "nightDayHandler(this);"
'공부를 합니다 > 언어 (Language)' 카테고리의 다른 글
WEB2 - JavaScript_27 파일로 쪼개서 정리정돈하기 (0) | 2020.05.07 |
---|---|
WEB2 - JavaScript_24-26 객체 (0) | 2020.05.05 |
WEB2 - JavaScript_16-20 배열과 반복문 (0) | 2020.05.04 |
WEB2 - JavaScript_15 리팩토링(Refactoring) (0) | 2020.05.04 |
Language_Navigator (0) | 2020.05.01 |