function에서 유난히 더 이해가 어려웠던 파라미터..!
parameter 개념을 제대로 익혀보자
파라미터? 그게 뭐고 🤷
- parameter(파라미터): 함수 내에 구멍🕳을 뚫는 것
- 비슷한 함수가 많으면 가변적인 부분에 구멍을 뚫어서 재사용한다
- 하나의 함수로 다양한 기능 실행 가능해짐 - 함수에 구멍 뚫는 방법
- () 소괄호 내에 아무 글자나 적기
- {} 중괄호 내에도 같은 글자 아무데나 작성 - 근데.. 구멍을 왜 뚫는거지?
- 구멍을 뚫으면 함수를 업그레이드해서 사용할 수 있다
- 이제 함수를 쓸 때 소괄호 내에 문자, 숫자 등을 입력해서 사용 가능
- 알림창열기('안녕') 이란,
→ 구멍에 '안녕'을 넣어서 알림창열기 안의 코드를 실행해주세요! 라는 뜻
→ 참고) ' ' 있으면 문자임 ('123'은 문자, 123은 숫자) - 주의사항
- .style.display = 구멍; / 알림창열기('구멍');
→ js 에서는) 구멍에 '' 붙이지 않기!
→ html 에서는) '구멍' 에 '' 붙이기!
function 알림창열기(구멍){
document.getElementById('alert').style.display = 구멍;
}
파라미터 활용 예시
복잡한 수식을 여러 번 적지 않고 재사용하고 싶을 때, 아래와 같이 파라미터를 활용한다
여기서는 구멍(파라미터) 자리에 a를 넣어주었다
function plus(a) {
2 + a
}
// plus(3)은 2+3 = 5를 반환한다
// plus(100)은 2+100 = 102를 반환한다
파라미터를 여러 개 넣는 것도 가능하다
function plus(a, b) {
a + b
}
// plus(5, 10)은 5+10 = 15를 반환한다
** 수학에서 함수 공부할 때를 떠올리면 쉽다.
f(x) = x + 1 일 때
f(3) = 4
f(5) = 6
문제
문제
HTML이 다음과 같을 때, 아래 조건에 맞는 알림창이 나오도록 설정해보자
- 버튼1을 누르면 '아이디를 입력하세요' 알림창 등장
- 버튼2를 누르면 '비밀번호를 입력하세요' 알림창 등장
<div class="alert-box" id="alert">
<p>아이디를 입력하세요</p>
<button onclick="알림창열기('none')">닫기</button>
</div>
<div class="alert-box" id="alert">
<p>비밀번호를 입력하세요</p>
<button onclick="알림창열기('none')">닫기</button>
</div>
<button onclick="알림창열기('block');">버튼1</button>
<button onclick="알림창열기('block');">버튼2</button>
<script>
function 알림창열기(구멍) {
document.getElementById('alert').style.display = 구멍;
}
</script>
풀이 1)
- id, pw창에 각각의 아이디를 부여하여 한 함수 안에 두 줄을 작성한다
- 한 함수 내에 두 개의 파라미터를 부여하여 각각 실행한다
<div class="alert-box" id="alert-id">
<p>아이디를 입력하세요</p>
<button onclick="handleAlert('none')">닫기</button>
</div>
<div class="alert-box" id="alert-pw">
<p>비밀번호를 입력하세요</p>
<button onclick="handleAlert('none')">닫기</button>
</div>
<button onclick="handleAlert('block');">버튼1</button>
<button onclick="handleAlert('block');">버튼2</button>
<script>
function handleAlert(event1, event2) {
document.getElementById('alert-id').style.display = event1;
document.getElementById('alert-pw').style.display = event2;
}
</script>
풀이 2) ** 최종 완성
저렇게 해도 작동은 되지만, 어떻게 해야 간결하게 쓸 수 있을까 고민을 했다.
그러다 id, pw 창을 분리하지 않고, 버튼 클릭에 따른 텍스트 변경 + display 변경을 한 함수에 넣었더니
코드를 훨씬 간결하게 작성할 수 있었다.
p 태그의 id도 가능하면 상위 id인 alert에 따라 alert-text 라고 직관적으로 지으려고 했다.
함수명도 강사님께서 제안하신 이름보다는 handleAlert 라는 동사형으로 지어서 그 성격을 파악하기 쉽도록 했다
(클린코드의 효과인가 ..!ㅋㅋㅋ 최근 네이밍에 더욱 신중해졌다)
- 버튼1, 2를 누르면 각각 제목만 바꾼 알림창을 띄운다
→ alert-box 전체 숨겨두기
→ handleAlert 함수 하나에 인수 2개(display, innerHTML)를 주고 꺼내서 쓰기
<div class="alert-box" id="alert">
<p id="alert-text"></p>
<button onclick="handleAlert('none')">닫기</button>
</div>
<button onclick="handleAlert('block','아이디를 입력하세요');">버튼1</button>
<button onclick="handleAlert('block','비밀번호를 입력하세요');">버튼2</button>
<script>
function handleAlert(event1, event2) {
document.getElementById('alert').style.display = event1;
document.getElementById('alert-text').innerHTML = event2;
}
</script>
해답
강사님이 공개하신 정답은 아래와 같다.
직관적이기는 하지만 내가 생각했던 것보다는 길어서, 오래 고민한 보람이 있구나 느꼈다.
혼자 더 고민하고 성장한 기분!
<div class="alert-box" id="alert">
<p id="title">알림창</p>
<button onclick="알림창열기('none')">닫기</button>
</div>
<button onclick="아이디알림창();">버튼1</button>
<button onclick="비밀번호알림창();">버튼2</button>
<script>
function 아이디알림창() {
document.getElementById('alert').style.display = 'block';
document.getElementById('title').innerHTML = '아이디를 입력하세요';
}
function 비밀번호알림창() {
document.getElementById('alert').style.display = 'block';
document.getElementById('title').innerHTML = '비밀번호를 입력하세요';
}
function 알림창열기(구멍) {
document.getElementById('alert').style.display = 구멍;
}
</script>
'Web > JavaScript' 카테고리의 다른 글
[JS] 서브메뉴를 만들자! classList 🗂 다루기 (2) | 2022.10.04 |
---|---|
[JS] 이벤트리스너: 들을게 👂 (2) | 2022.10.04 |
[JS] 생소했던 function 문법 🔨 이해하기 (0) | 2022.09.28 |
[JS] 동적 UI 만들기 🎨 (Alert 박스, 알림창 제작) (0) | 2022.09.28 |
[JS] 복습 시작! ✨ (HTML 조작, 셀렉터, 메소드, 주석 처리) (0) | 2022.09.28 |