Frontend/Study

[JS] 15_함수와 이벤트

BeNI 2021. 7. 13. 18:01
728x90

# "Do it! HTML+CSS+자바스크립트 웹 표준의 정석" 책을 바탕으로 작성하였습니다.

 

1. 함수 알아보기

1) 함수 선언

function 함수명() {
	명령
}

2) 함수 호출

함수명() 또는 함수명(변수)

 

ex) 함수를 이용하여 두 수 더하기

function addNumber() {
    var num1 = 2;
    var num2 = 3;
    var sum = num1+ num2;
    alert("결과값: " + sum);
}

addNumber();

 

2. var를 사용한 변수의 특징

1) 변수의 범위

ⓐ 지역 변수 : 한 함수 안에서만 사용할 수 있는 변수

function addNumber() {
    var sum = 10+ 20; //함수 안에서 사용한 지역변수
}

addNumber();
console.log(sum); //오류 뜸

ⓑ 전역 변수 : 스크립트 소스 전체에서 사용할 수 있는 변수

- var 예약어를 빼고 선언하면 전역 변수가 된다.

function addNumber() {
    var sum = 10+ 20; //함수 안에서 사용한 지역변수
    multi = 10 * 20;  //예약어를 빼고 선언한 전역변수
}

addNumber();
console.log(multi); //전역변수 사용

 

2) var변수와 호이스팅

- 호이스팅 : 상황에 따라 변수의 선언과 할당을 분리해서 선언 부분을 스코프의 가장 위쪽으로 끌어올림

var x = 10;

function func(){
    console.log("x is " + x);
    console.log("y is " + y);
    var y = 20;
}
func();

 

위와 같이 코드를 작성하고, 콘솔창에서 확인해 보면 아래와 같다.

자바스크립트 해석기는 함수 소스를 훑어 보면서 var를 사용한 변수는 따로 기억해 두기 때문에,

미리 선언한 것과 같은 효과가 난다. => 호이스팅

 

 

3) 변수의 재선언과 재할당

- var을 사용한 변수는 재선언과 재할당이 가능하다.

function addNumber(num1, num2) { 								
	return num1 + num2;	//2개의 수 더하기		
}
    
var sum = addNumber(10, 20);
console.log(sum);

sum = 50; //sum 변수 재할당
console.log(sum);

var sum = 100;  //sum 변수 재선언
console.log(sum);

 

3. let와 const

1) let 변수

- 블록 영역의 스코프를 가짐

function calcSum(n) {
	let sum = 0;
	for(let i=0; i<n+1 ; i++) {
		sum += i;
	}
	console.log(sum);
}
calcSum(10);

위와 같은 코드에서, let으로 선언한 i변수는 for문안에서만 적용되고 sum은 calcSum 함수 안에서만 적용된다.

 

ⓐ 특징

- let 예약어를 쓰지 않고 변수 이름과 초깃값을 할당하면 전역변수가 된다.

- 재할당은 가능하지만, 재선언은 불가능하다.

- 호이스팅이 없는 변수이다.

 

2) const 변수

- const로 선언한 변수는 상수 변수이다.

- 변하지 않는 값을 변수로 선언할 때 예약어 const를 사용한다.

- 한번 선언하면 재선언과 재할당이 불가능하다.

 

4. 재사용할 수 있는 함수 만들기

1) 매개변수와 return

- 매개변수와 return문을 이용하면 함수를 효율적으로 사용할 수 있다.

function addNumber(num1, num2){ 								
			return num1 + num2;						
	}
    
var result = addNumber(2, 3);
document.write("두 수를 더 한 값 : " + result);

* 매개 변수의 기본값을 지정 가능하다.

function multiple(a, b = 5, c = 10) { 	// b = 5, c = 10으로 기본값 지정
	return a * b + c;

 

5. 함수 표현식

1) 익명 함수

- 함수의 이름이 없는 함수를 익명 함수라고 한다.

var sum = function(a, b){
      return a + b;
    }
document.write("함수 실행 결과 : " + sum(10, 20) );

2) 즉시 실행 함수

- 함수를 정의하면서 동시에 실행이 가능한 함수

(function(매개변수) {
	명령
}(인수));

 

3) 화살표 함수

- ES6 버전 부터 =>표기법을 사용하여 함수 선언을 좀 더 간단하게 작성 가능하다.

- 익명 함수에서만 사용이 가능하다.

(매개변수) => { 함수 내용 };

 

ex) 매개변수가 없는 함수

const hi = function() {
  return "안녕하세요?";
}

위 함수를 화살표 작성하면 아래와 같다.

const hi = () => { return "안녕하세요" }; //한 줄이면 중괄호 생략 가능하다.

 

6. 이벤트와 이벤트 처리기

1) 이벤트 : 웹 브라우저나 사용자가 행하는 동작 ex) 키보드 키 누르기

2) 이벤트 처리기 : 웹 문서에서 이벤트가 발생할 때 그 이벤트에 반응해서 실행하는 함수

 

3) 종류

ⓐ 마우스 이벤트

종류 설명
click 클릭 시
dblclick 더블 클릭시
mousedown 마우스 버튼 누를 때
mousemove 마우스 버튼 움직일 때
mouseover 마우스 포인터가 요소 위로 옮겨질 때
mouseout 마우스 포인터가 요소가 벗어날 때
mouseup 마우스 버튼에서 손을 뗄 때

 

ⓑ 키보드 이벤트

종류 설명
keydown 키를 누르는 동안 
keypress 키를 눌렀을 때
keyup 키를 뗄 때

 

ⓒ 문서 로딩 벤트

종류 설명
abort 완전히 로딩되기전에 불러오기를 멈췄을 때
error 정확히 로딩되지 않았을 때
load 로딩이 끝났을 때
resize 화면 크기가 바뀌었을 때
scorll 화면이 스크롤되었을 때
unload 문서를 벗어날 때

 

ⓓ 폼 이벤트

종류 설명
blur 폼 요소에 포커스를 잃었을 때
change 목록, 체크 상태등이 변경될 때
focus 폼 요소에 포커스가 놓였을 때
reset 폼이 리셋되었을 때
submit submit을 클릭했을 때

 

4) 사용 방법

<태그 이벤트명 = "함수명">

 

ex) 버튼 클릭시 배경색 바꾸기

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>자바스크립트 이벤트</title>
	<style>
		a:link, a:visited {
		color:black;
		text-decoration: none;
	}
	ul {
		list-style: none;
		width:500px;
		margin:10px auto;
		padding:0;
	}
	li {
		display:inline-block;
		width:120px;
		border:1px solid #ccc;
		padding:10px 15px;	
		font-size:16px;
		text-align:center;
	}
	#result {
		width:500px;
		height:300px;
		margin:30px auto;
		border:2px solid #ccc;
		border-radius:15px;
	}
	p {
		width:80%;
		padding:10px;
		line-height: 2em;
	}
	</style>
</head>
<body>
	<ul>
		<li><a href="#" onclick="changeBg('green')">Green</a></li>
		<li><a href="#" onclick="changeBg('orange')">Orange</a></li>
		<li><a href="#" onclick="changeBg('purple')">Purple</a></li>
	</ul>		
	<div id="result"></div>
	
	<script>
		function changeBg(color) {
			var result = document.querySelector('#result');
			result.style.backgroundColor = color;
		}
	</script>
</body>
</html>

 

7. DOM을 이용한 이벤트 처리기

- DOM을 사용하면 자바스크립트가 HTML의 요소를 가져와서 이벤트 처리기를 연결한다.

웹 요소.onclick = 함수;

 

1) querySelector()  : 웹 요소를 가져오는 함수

- 함수의 괄호 안에는 클래스 이름, id 등 다양한 선택자를 넣을 수 있다.

// 방법 1 : 웹 요소를 변수로 지정 & 미리 만든 함수 사용
var changeBttn = document.querySelector("#change");
changeBttn.onclick = changeColor;
    
function changeColor() {
   document.querySelector("p").style.color = "#f00";
}
   
// 방법 2 : 웹 요소를 따로 변수로 만들지 않고 사용
document.querySelector("#change").onclick = changeColor;

function changeColor() {
   document.querySelector("p").style.color = "#f00";
}
    
// 방법 3 : 직접 함수를 선언
document.querySelector("#change").onclick = function() {
document.querySelector("p").style.color = "#f00";
};

 

728x90