1. 함수
- 특정 작업을 여러번 반복해야 하는경우 해당작업을 재사용 가능한 구주로 만들게 되는데 이때 사용하는게 함수
- 특정 기능을 수행하는 일련의 코드 블록을 하나의 실행 단위로 만든것(사전적 정의)
1-1) 함수 선언식
- 함수 선언 키워드, 함수명, 파라미터(옵션), 코드블록, 반환 값(옵션)
- 함수가 정의되었다고 자동으로 실행되는것이 아닌, 함수명을 사용해서 호출했을때 실행됨
- 함수명을 사용해서 입력 파라미터에 대응되는 인수(arguments)를 전달하면 함수에 작성된 코드블록이 실행되고 그 결과를 반환함
예제)
function sum(p1, p2) {
let sum = p1+p2;
return sum;
}
let sum1 = sum(21, 24);
let sum2 = sum(7, 16);
console.log(sum1);
console.log(sum2);
1-2)함수의 주석처리
- 문서주석 사용
- p1과 p2 좌측에 있는 {}안에 type을 쓰고 returns에는 어떤 기능을 하는지 적으면 된다.
- 함수에 대한 주석을 사용하면 자동완성시 함수에 대한 설명이 나온다.
1-3) 함수 표현식
- 변수에 함수를 할당해서 사용하는 방식
- 익명함수 (훨씬 더 많이 사용)
let sumF = function(p1, p2) {
return p1 + p2;
}
console.log(sumF(10, 20));
* hoist, var, scope
1-4) Function 생성자 함수 (불편해서 안씀)
- Function 함수에 파라미터와 코드블럭을 문자열 순서대로 전달하여 생성
- 전달하는 파라미터가 없으면 코드블럭만 문자열로 전달하면 되고, 있으면 개수만큼 문자열로 파라미터 이름을 전달
예제)
let sumF2 = new Function("p1", "p2", "return p1+p2");
console.log(sumF2(30, 35));
1-5) 함수를 사용하는 이유
- 코드의 재활용, 유지보수 편의성, 코드 가독성 향상, 코드 품질 향상 및 신뢰성 확보
* 자바스크립트 실행시
- 전체적인 코드 스캔 (자기의 scope)
- 선언파트를 전부 끌어올림 (hoist)
var num;
console.log(num);
var num = 10;
console.log(num);
f1();
f2(); // undefined이기 때문에 에러가 발생
function f1() {
console.log("f1");
}
var f2 = function() {
console.log("f2");
}
// var c = 20; // 전역변수
function f8(a, b) {
// console.log(c); // 실행시 호이스팅으로 인해 c는 undefined가 출력됨
c = 10; // 지역변수
// console.log(c);
// console.log(window.c);
}
f8();
console.log(c);
↑ 지역 위치에서 전역 변수 선언 (사용하면 안됨)
이름충돌 방지를 위해서 지역변수를 사용해야함
* 클로저
-
- 함수를 반환할 때 발생
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures
var num;
console.log(num);
var num = 10;
console.log(num);
f1();
// f2(); // undefined이기 때문에 에러가 발생
function f1() {
console.log("f1");
}
var f2 = function() {
console.log("f2");
}
// 함수 데이터 타입
console.log(typeof f1);
console.log(typeof f2);
let f3 = f1; //
f3();
//함수를 파라미터로 보냄
let f4 = function(p1, p2) {
p1();
p2();
}
// 파라미터를 통해 함수의 호출을 위임할 수 있음
// 이때 이 함수를 callback이라고 함
f4(f1, function() {
console.log(1234);
});
f4(f1, () => console.log(1234));
// 람다식
let f5 = function(a, b) {
return a + b;
}
let f6 = (a, b) => { return a + b } ;
let f7 = (a, b) => a + b;
console.log(f5(10, 20));
console.log(f6(10, 20));
console.log(f7(10, 20));
// var c = 20; // 전역변수
function f8(a, b) {
// console.log(c); // 실행시 호이스팅으로 인해 c는 undefined가 출력됨
c = 10; // 지역변수
// console.log(c);
// console.log(window.c);
}
f8();
console.log(c);
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>Page Title</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<!-- <script src="scope.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("a").click(function() {
return confirm(this.href + "로 이동하시겠습니까?");
})
})
function makeFunc() {
var name = "Mozilla"; // 지역변수
function displayName() { // 지역함수
console.log(name);
}
return displayName;
}
// makeFunc()();
var ret = makeFunc();
ret();
(function (a, b) { // 익명함수
console.log("hello java", a, b);
})
(10, 20); // 익명함수의 호출
((a, b) => console.log("hello java", a, b)) (10, 20); // 람다식으로 변경 가능..
let arr = [1, 5, 4, 3, 2, 6, 7];
function compFn(a, b) {
return b - a
}
arr.sort(compFn);
console.log(arr);
// arr.sort(function(a, b) {return a - b});
// arr.sort((a, b) => -(a - b));
// console.log(arr);
</script>
</head>
<body>
<a href="https://www.google.com">구글</a>
</body>
</html>
※ 내장 객체
1. Object 객체
- 브라우저의 자바스크립트 엔진에 내장된 객체
- object객체는 모든 자바스크립트 객체의 루트객체이다
2. String 객체
- 자바와 거의 동일
2-1) length
let str = "abcd";
str.length = 20;
console.log(str.length);
2-2) indexOf()
- 0번인덱스부터 탐색
-
str = "abcdeabcdeabcde";
console.log(str.indexOf("cd", 6));
2-3)lastIndexOf()
- 마지막 인덱스부터 탐색
2-4) slice(), substring(), substr
/*
이상~미만
slice == substring (시작위치, 종료위치)
주로 slice 사용
substr (시작위치, 갯수)
*/
console.log(str.slice(-3, -1));
2-5)replace()
- 특정 문자를 지정한 문자열로 변경
- 처음 발견된 문자열만 바꿈
console.log(str);
console.log(str.replace("ab", "fg"));
정규표현식 사용
console.log(str);
console.log(str.replace(/ab/g, "fg")); // /ab/는 정규표현식
/ab/를 /Ab/로 바꾸고 /Ab/gi를 입력하면 대소문자를 구분하지않고 찾아서 바꿔줌
2-6) toUpperCase(), toLowerCase()
- 혼자 공부해라
2-7) concat
- 그냥 + 써라
2-8) trim()
- 앞뒤공백 삭제
2-9)padStart(), padEnd()
let id = "javaman"; // jav****
let id2 = "batman"; // bat***
function maskId(str) {
// console.log(str);
return str.slice(0, 3).padEnd(str.length, "*");
}
console.log(maskId(id));
console.log(maskId(id2));
* 자동완성이 안되도 당황하지 말자..
2-10) charAt() (잘 안씀)
- 문자열에서 특정 인덱스에 해당하는 문자열 하나를 반환
2-11) charCodeAt()
* fromCharCode
str = "";
for (let i=0; i<26; i++) {
str += String.fromCharCode(65+i);
}
console.log(str);
2-12) split()
- 문자열 내 특정 구분자를 기준으로 문자열을 분리해서 문자열 배열로 반환
2-13) startsWith(), endsWith()
*
// 사용방식이 동일함
let str2 = "abcd"; // string
let str3 = new String("abcd"); // object
console.log(str2 == str3);
console.log(str2 === str3);
사용방식은 동일하지만 타입이 다름
3. Number 객체
- 숫자를 다룰때 유용한 프로퍼티와 함수를 제공하는 래퍼 객체
-
3-1) toString()
- 숫자형 데이터를 문자형 데이터로 반환
let num = 1234;
num = num + ""; // 문자열로 바꾸는 야매코드
num = String(num); // 문자열로 바꾸는 코드
num = num.toString(); // 문자열로 바꾸는 코드2
3-2) toExponential() (많이 안씀)
- 숫자를 지수형으로 반환
num = 1.234567e3;
console.log(num);
3-3) toFixed()
- 소수점 몇번째 자리까지 보여줄지 경정하는 함수
- 지정된 소수점 자리수에 대한 반올림값을 반환
3-4) toPrecision()
*3-5, 3-6은 Number객체가 아님
3-5) parseInt()
- 정수로 반환
3-6) parseFloat()
- 부동소수점으로 반환
4. Array 객체
4-1) toString()
- 배열안의 모든 문자를 쉼포를 이용해 모두 결합해서 하나의 문자열로 반환
4-2) join
- 배열 안의 모든 문자를 파라미터로 지정한 문자를 이용해서 모두 결합하여 하나의 문자열로 반환
let arr = [1, 2, 3, 'a', 'b'];
let result = arr.join("-");
console.log(result);
*
// prop, method
function Student(no, name, kor, eng, mat) { // 생성자 함수
this.no = no;
this.name = name;
var k = kor; // 캡슐화
this.eng = eng;
this.mat = mat;
this.getKor = function() { // 캡슐화
return k;
}
this.setKor = function(kor) {
return k;
}
this.total = function() {
return this.getKor() + this.eng + this.mat;
}
this.avg = function() {
return (this.total() / 3).toFixed(2);
}
}
Student(1, "홍길동", 90, 80, 90);
let stud1 = new Student(1, "홍길동", 90, 80, 90);
// console.log(stud1.avg());
// let students = [];
// students.push(stud1);
// students.push(new Student(2, "고길동", 70, 80, 80));
// students.push(new Student(3, "이길동", 30, 50, 90));
console.log(stud1.kor, stud1.eng, stud1.getKor());
4-3) pop(), push(), shift(), unshift()
let arr = [1, 3, 5, 7];
// push, unshift 추가
// pop, shift 제거
// splice, sort 변화
let arr2 = arr.slice(1); // [3, 5, 7]
console.log(arr); //
console.log(arr2); //
arr.push(9); // 마지막 인덱스에 추가
arr.unshift(11); // 0번인덱스에 추가
console.log(arr);
arr.pop(); //마지막 인덱스 제거
console.log(arr);
arr.shift(); // 0번인덱스 제거
console.log(arr);
* prototype
// prop, method
function Student(no, name, kor, eng, mat) { // 생성자 함수
this.no = no;
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
}
// 자바스크립트의 프로토타입이란 생성자 함수를 통해 정의된 객체들의 공용공간
Student.prototype.total = function() {
return this.kor + this.eng + this.mat;
}
Student.prototype.avg = function() {
return (this.total() / 3).toFixed(2);
}
Student.prototype.value = 10;
Student.getClassNo = function() {
return 206;
}
Student.value = 20;
let stud1 = new Student(10, "자바맨", 90, 100, 50);
console.log(stud1.total(), stud1.avg(), stud1.value, Student.getClassNo(), Student.value);
for(var i in stud1) {
console.log(i, stud1[i]);
}
// 날짜 객체에 함수를 추가
Date.prototype.nextDay = function (n) {
// if(!n) n = 1;
// n = n || 1
// !n ? 1 : n ;
this.setTime(this.getTime() + 1000 * 60 * 60 * 24 * (n || 1) );
return this;
}
let now = new Date(); // 2023-02-23 16:43:??
now.nextDay(5); //
console.log(now);
4-4) splice()
- 첫번째 파라미터 - 새로운 요소를 추가할 인덱스 번호
예제) remove prototype 만들기
Array.prototype.remove = function (n) { // n = 몇번째것을 제거할것인지
return this.splice(n, 1) // ()
}
arr.remove(2);
console.log(arr);
arr.remove(1);
console.log(arr);
'HTML5, CSS3 > Java Script' 카테고리의 다른 글
window.onload(js)와 $(document).ready(jquery)의 차이 (0) | 2024.01.17 |
---|---|
23-02-27 JS (0) | 2023.02.27 |
23-02-24 JS (0) | 2023.02.24 |
23-02-22 JS (0) | 2023.02.22 |