JS에서의 함수의 쓰임에 대해 살펴보자
기본 선언은 여태까지 사용해왔던것 처럼
function 함수이름(매개변수){
실행 내용
}
위와 같은 기본 틀을 가진다.
익명 함수란 간단하게 함수를 변수처럼 선언하는 것을 말한다.
여기서 꼭 짚어두고 가야 할 부분은 js에서 함수는 하나의 변수라고 생각해야 한다.
변수처럼 사용한다. 라면 이해하기 어려울 수 있는데
java와 다르게 메소드를 선언한다. 가 아니고
변수를 하나 선언하여 그 방에 함수 내용을 적을 수 있다. 라고 이해하자.
변수명 = function(){
실행 내용
}
위와 같이 사용한다.
스스로 실행되는 함수는 말 그대로 페이지를 열자마자 자동적으로 실행되는 함수이다.
(function( ){
}) ( );
위와 같이 사용하며 괄호에 주의하자
인자 및 매개변수는 java와는 다르게 함수 선언 시 매개변수 타입을 지정하지 않는다.
기본적으로 object 타입으로 잡히고 인자를 입력 시에는 선언 된 매개변수보다 인자를 많이 입력해도
상관은 없지만 초과된 인자는 버려진다.
이와 반대로 적게 호출하는 것도 역시 가능하고 사용이 안된 매개변수는 undefined라고 입력된다.
function 함수 이름( a, b, c){
}
함수 이름(a, b, c, d, e);
함수 이름(a, b);
리턴처리는 java와 똑같아 설명을 생략한다.
function 함수 이름(){
return 0;
}
가변인자 함수는 처음 선언 시 매개변수를 비워놓고
사용 할 때 인자를 마음대로 넣는 것이다.
이와 같이 사용하고 함수 안에서는 arguments라는 키워드로 매개변수를 다룰 수 있다.
arguments는 object 타입의 배열 형태로 입력한 값을 가지게 된다.
기본 틀을 확인해보자
function 함수 이름(){
arguments.length;
}
함수 이름(a, b, c, d, e, f, g);
내부(중첩) 함수는 함수 안의 함수라고 생각하면 된다.
앞에서 설명한 것 처럼 함수는 변수 취급으로
지역변수처럼 함수 안에서 선언한 내부함수이기 때문에
바깥에서 사용할 수 없는 함수이다.
function 함수이름(){
function 내부함수이름(){
}
내부함수이름();
}
함수이름() --- 사용가능
내부함수이름() --- 사용불가
다음의 예제를 통해 앞서 설명한 기능들을 확인해보자
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style type="text/css"> p { width: 500px; height: 100px; background: lightgray; border: 1px solid black; } </style> </head> <body> <h1>함수(Function)</h1> <h3>function 함수명(){소스코드 작성} 로 작성해서 실행하는 방법</h3> <button onclick="test1();">실행확인</button> <p id="p1"></p> <script type="text/javascript"> function test1() { var p1 = document.getElementById("p1"); p1.innerHTML += "test1() 함수 실행됨" } </script> <h3>함수명 = function(){코드작성} : 익명함수(이벤트 핸들러 작성시 주로 사용)</h3> <p id="p2"></p> <button onclick="test2();">실행확인</button> <script> // 변수방에 함수를 담아 사용하는 것 test2 = function(){ var p2 = document.getElementById("p2"); p2.innerHTML += "test2() 함수 실행 확인"; } </script> <h3>스스로 실행하는 함수 : (function(){})()</h3> <p id="p3"></p> <script type="text/javascript"> (function() { var p3 = document.getElementById("p3"); p3.innerHTML += "자동으로 혼자 실행됨..."; })(); </script> <h3>함수의 전달 인자와 매개변수</h3> <button id="btn1">실행 확인</button> <p id="p4"></p> <script type="text/javascript"> function test4(value) { var p4 = document.getElementById("p4"); p4.innerHTML += value + "<br>"; } document.getElementById("btn1").onclick = function name() { test4(window.prompt("메세지를 입력하세요")); // 지정된 매개변수보다 많은 갯수의 인자를 넣는 것을 허용한다. // 단, 초과된 인자는 무시된다. test4('안녕하세요', '반갑습니다'); // 지정된 매개변수보다 적게 호출하는 것도 허용한다. // 단, 선언이 안된 매개변수는 undefined가 된다. test4(); } </script> <h3>함수의 리턴처리</h3> <button onclick="test5();">실행확인</button> <p id="p5"></p> <script type="text/javascript"> function returnFunction() { return Math.floor(Math.random() * 100) + 1; } function test5() { var p5 = document.getElementById("p5"); var value = returnFunction(); p5.innerHTML = value; } </script> <h3>가변인자 함수 테스트</h3> <button onclick="test6();">확인하기</button> <p id="p6"></p> <script type="text/javascript"> function sumAll() { // arguments를 사용하면 매개변수를 사용하지 않아도 매개변수 값을 확인할 수 있다. console.log(arguments); console.log('arguments의 타입 : ' + typeof(arguments)); console.log('arguments의 길이 : ' + arguments.length ); var sum = 0; for(var i = 0; i < arguments.length; i++){ sum += arguments[i]; } document.getElementById("p6").innerHTML = '더하기 결과 : ' + sum; } function test6() { sumAll(11, 2, 33, 444, 5555, 66, 77, 8); sumAll(33, 44, 66, 22, 33, 11,22, 44, 44, 55, 66); } </script> <h3>내부(중첩된) 함수 테스트</h3> <label>삼각형 밑변 : </label> <input type="number" min="1" max="100" id="width" required> <br> <label>삼각형 높이 : </label> <input type="number" min="1" max="100" id="height" required> <br> <button onclick="test7();">실행 확인</button> <br> <p id="p7"></p> <script type="text/javascript"> // 피타고라스의 정리 // 모든 직각 삼각형에서 빗변의 제곱은 다른 두 변의 제곱의 합과 같다. function calc(w, h) { // 내부 함수는 지역변수처럼 여기서만 사용가능 // 밖으로 나갈 수 없음 function square(x) { return x * x; } return Math.sqrt(square(2) + square(h)); } function test7() { var width = document.getElementById("width").value var height = document.getElementById("height").value document.getElementById("p7").innerHTML += '빗변의 길이 : ' + calc(width, height); } </script> </body> </html>