가변 매개변수 함수 : 매개변수의 개수가 고정적이지 않은 함수(나머지 매개변수(...)를 활용해서 만든다)
나머지 매개변수 (배열
이 들어온다)
function 함수 이름(... 나머지 매개변수) { }
function 함수 이름(매개변수, 매개변수, ...나머지 매개변수) { }
함수 이름(...배열)
함수 이름(매개변수, 매개변수=기본값, 매개변수=기본값)
const isLeapYear = function (연도 = new Date().getFullYear()) { if (typeof(연도) === 'undefined') { 연도 = new Date().getFullYear() } 연도 = typeof(연도) === 'undefined' ? new Date().getFullYear() : 연도 연도 = typeof(연도) !== 'undefined' ? 연도 : new Date().getFullYear() 연도 = 연도 || new Date().getFullYear() console.log(`연도: ${연도}`) return (연도 % 4 === 0) && (연도 % 100 !== 0) || (연도 % 400 === 0) } console.log(isLeapYear())
arguments를 사용한 가변 매개변수 함수
function sample() { console.log(arguments) for(let i = 0; i < arguments.length; i++){ console.log(`${i}번째 요소: ${arguments[i]}`) } }
전개 연산자가 없던 구 버전에서 apply()함수 사용하기
function sample(...items) { console.log(items) } const array = [1, 2, 3, 4] console.log(sample.apply(null, array))
구 버전 자바스크립트에서 기본 매개변수 구현하기
function earnings (wage, hours) { wage = typeof(wage) != undefined ? wage : 8590 hours = typeof(hours) != undefined ? hours : 52 return wage * hours }
function earning (wage, hours) { wage = wage || 8590 hours = hours || 52 return wage * hours }
A부터 B까지 범위를 지정했을 때 범위 안의 숫자를 모두 곱하는 함수
const multiplyAll = function(a, b){ let output = 0 for(let i = 1; i <= 100; i++){ output *= i } return output }
매개변수로 max([1, 2, 3, 4])와 같은 배열을 받는 max()함수
const max = function(array){ let output = array[0] for(const data of array){ if(output < data){ output = data } } return output } console.log(max([1, 2, 3, 4]))
매개변수로 max([1, 2, 3, 4])와 같이 숫자를 받는 max()함수
const max = function(...array){ let output = array[0] for(const data of array){ if(output < data) { output = data } } return output } console.log(max(1, 2, 3, 4))
max([1, 2, 3, 4])형태와 max(1, 2, 3, 4)형태를 모두 입력할 수 있는 max()함수
const max = function(first, ...rests){ let output let items if(Array.isArray(first)) { output = first[0] items = first } else if (typeof(first) === 'number'){ output = first items = rests } for(const data of items) { if(output < data) { output = data } } return output } console.log(`max(배열): ${max([1, 2, 3, 4])}`) console.log(`max(숫자, ...): ${max([1, 2, 3, 4])}`)
function callThreeTimes(callback){ for(let i = 0; i < 3; i++){ callback(i) } } callThreeTimes(function (i){ console.log(`${i}번째 함수 호출`) })
function (value, index, array) { }
const numbers = [273, 52, 103, 32, 57] numbers.forEach(function (value, index, array) { console.log(`${index}번째 요소 : ${value}`) })
let numbers = [273, 52, 103, 32, 57] numbers = numbers.map(function (value) { return value * value }) numbers.forEach(console.log)
const numbers = [0, 1, 2, 3, 4, 5] const evenNumbers = numbers.filter(function (value) { return value % 2 === 0 }) console.log(`원래 배열: ${numbers}`) console.log(`짝수만 추출: $evenNumbers}`)
(매개변수) => { }불 표현식 || 불 표현식이 거짓일 때 실행할 문장
(매개변수) => 리턴값
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] numbers .filter((value) => value % 2 ===0) .map((value) => value * value) .forEach((value) => { console.log(value) })
setTimeout(() => { console.log('1초 후에 실행됩니다') }, 1 * 1000) let count = 0 setInterval(() => { console.log(`1초마다 실행됩니다(${count}번째)`) count++ }, 1 * 1000)
let id let count = 0 id = setInterval(() => { console.log(`1초마다 실행됩니다(${count}번째)`) count++ }, 1 * 1000) setTimeout(() => { console.log('타이머를 종료합니다.') clearInterval(id) }, 5 * 1000)
즉시호출 함수
: 변수의 이름 충돌을 막기 위해서 코드를 안전하게 사용하는 방법
(function () { })()
엄격모드
: 실수를 줄일 수 있는 방법
'use strict'
문장
문장
익명함수
: 순차적인 코드 실행에서 코드가 해당 줄을 읽을 때 생성
선언적함수
: 순차적인 코드 실행이 일어나기 전에 생성
(같은 블록이라면 어디에서 함수 호출해도 상관X)
let numbers = [273, 25, 75, 52, 103, 32, 57, 24, 76] // 홀수만 추출 numbers = numbers.filter((x) => x % 2 === 1) // 100이하의 수만 추출 numbers = numbers.filter((x) => x <= 100) // 5로 나눈 나머지가 0인 수만 추출 numbers = numbers.filter((x) => x % 5 === 0)
const array = ['사과', '배', '귤', '바나나'] <!--console.log('# for in 반복문') for (const i in array) { console.log(i) } --> console.log('# for in 반복문') array.forEach((item, i) => { console.log(i) }) // for in은 인덱스만(0, 1, 2, 3) <!--console.log('# for of 반복문') for (const i of array) { console.log(i) } --> console.log('# for of 반복문') array.forEach((item, i) => { console.log(item) }) // for of는 요소만 추출(사과, 배, 귤, 바나나)