home
자바
home

셀프체크 - 연달아 계산하기

함수가 함수를 반환하는 함수가 고차함수
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>계산기</title> <style> * { box-sizing: border-box;} #result { width: 180px; height: 50px; margin: 5px; text-align: right;} #operator { width: 50px; height: 50px; margin: 5px; text-align: center;} button {width: 50px; height: 50px; margin: 5px;} </style> </head> <body> <input readonly id="operator"> <input readonly type="number" id="result"> <div class="row"> <button id="num-7">7</button> <button id="num-8">8</button> <button id="num-9">9</button> <button id="plus">+</button> </div> <div class="row"> <button id="num-4">4</button> <button id="num-5">5</button> <button id="num-6">6</button> <button id="minus">-</button> </div> <div class="row"> <button id="num-1">1</button> <button id="num-2">2</button> <button id="num-3">3</button> <button id="divide">/</button> </div> <div class="row"> <button id="clear">C</button> <button id="num-0">0</button> <button id="calculate">=</button> <button id="multiply">x</button> </div> <script> let numOne = ''; let operator = ''; let numTwo = ''; const $operator = document.querySelector('#operator'); const $result = document.querySelector('#result'); const onClickNumber = (event) => { // 함수가 함수를 리턴한다 if (operator) { // 비어있지 않다 if (!numTwo) { $result.value = ''; } numTwo += event.target.textContent; // 내가 클릭한 타겟의 글자를 가져온다 } else { // 비어있다 numOne += event.target.textContent; } $result.value += event.target.textContent; } document.querySelector('#num-0').addEventListener('click', onClickNumber); document.querySelector('#num-1').addEventListener('click', onClickNumber); document.querySelector('#num-2').addEventListener('click', onClickNumber); document.querySelector('#num-3').addEventListener('click', onClickNumber); document.querySelector('#num-4').addEventListener('click', onClickNumber); document.querySelector('#num-5').addEventListener('click', onClickNumber); document.querySelector('#num-6').addEventListener('click', onClickNumber); document.querySelector('#num-7').addEventListener('click', onClickNumber); document.querySelector('#num-8').addEventListener('click', onClickNumber); document.querySelector('#num-9').addEventListener('click', onClickNumber); // 고차함수 사용 const onClickOperator = (op) => () => { if(numTwo) { switch (operator) { case '+': $result.value = parseInt(numOne) + parseInt(numTwo); break; case '-': $result.value = numOne - numTwo; break; case '/': $result.value = numOne / numTwo; break; case '*': $result.value = numOne * numTwo; break; default: break; } numOne = $result.value; numTwo = ''; } if(numOne) { operator = op; $operator.value = op; } else { alert('숫자를 먼저 입력하세요.'); } } document.querySelector('#plus').addEventListener('click', onClickOperator('+')); document.querySelector('#minus').addEventListener('click', onClickOperator('-')); document.querySelector('#divide').addEventListener('click', onClickOperator('/')); document.querySelector('#multiply').addEventListener('click', onClickOperator('*')); document.querySelector('#calculate').addEventListener('click', () => { if (numTwo) { switch (operator) { case '+': $result.value = parseInt(numOne) + parseInt(numTwo); break; case '-': $result.value = numOne - numTwo; break; case '/': $result.value = numOne / numTwo; break; case '*': $result.value = numOne * numTwo; break; default: break; } } // [=] 버튼을 클릭 했을 때 // 1. 연산자를 없애준다. $operator.value = ''; // 2. 첫 번째 숫자에 계산된 결과 값을 넣는다. numOne = $result.value; // 3. 초기화 한다. operator = ''; numTwo = ''; }); document.querySelector('#clear').addEventListener('click', () => { numOne = ''; operator = ''; numTwo = ''; $operator.value = ''; $result.value = ''; }); </script> </body> </html>
JavaScript
복사