22.10.11.화
function 함수이름(parameter1, parameter2...) {
실행코드...
return 반환값
}
function myFunction(x,y){ //함수의 정의
z = x + y //함수의 기능
return z; //함수의 결과값
}
// 함수의 호출
myFunction(4,3); // 7
소괄호()내에는 매개변수
중괄호 {}내에는 실행코드와 return(결과)값
함수를 호출하기 위해서는 선언된 함수의 매개변수 값을 인수로 전달
이때 myFunction으로 선언된 함수에 인수로 4, 3을 전달
함수내 실행코드의 결과값인 7 출력
function 안녕(){
console.log('hello')
console.log('hello')
console.log('hello')
return
console.log('hello')
console.log('hello')
console.log('hello')
}
안녕();
//
hello
hello
hello
undefined
리턴 아래로 실행하지 않는다
function 함수1 (a,b,c) {
return a + b + c
}
함수1(10, 20, 30)
함수1(10, 20, 50)
// 80
콘솔창의 기능! 마지막 라인에 한해서 console.log() 찍지 않아도 리턴 값을 콘솔창에 출력해준다
console.log(함수1(10, 20, 30))
console.log(함수1(10, 20, 50))
// 60
// 80
필요 이상의 아규먼트를 넣었을 때
함수1(10, 20, 30, 40)
// 60 (Error 나지 않음)
필요 이하의 아규먼트 넣었을 때
function 함수1 (a, b, c){
return a + b + String(c)
}
함수1(10, 20)
// 30undefined (c에 값이 들어가야하는데 없으니까 undefined고 스트링 문자열!)
function 함수2(a, b, ...c){
console.log(c)
return Math.max(...c)
}
함수2('hello', 'world', 10, 20, 30, 40)
//
(4) [10, 20, 30, 40]
40
function 함수2([a, b], ...c){
console.log(a)
console.log(b)
console.log(c)
}
함수2([1, 2], 10, 20, 30, 40)
//
1
2
(4) [10, 20, 30, 40]
function 함수3(a=10, b=20, c=30){
return a+b+c
}
console.log(함수3())
console.log(함수3(100))
console.log(함수3(100,200))
console.log(함수3(100,200,300))
//60
//150
//330
//660
// undefined
console.log((함수c=1000))
// 1050 <- 값은 순서대로 들어가서 a에 1000이 들어간 것!
console.log(함수3(c=1000, a=2000))
// 3030
https://www.freecodecamp.org/news/elegant-patterns-in-modern-javascript-roro-be01e7669cbd/
function 함수4(회원등급, 글쓰기, 글읽기, 채널관리, 백업, 소설로그인여부){ // 회원등급
console.log('함수기능')
return
}
ㄴ 개선할 여지가 있는 예제
함수4('Gold', true, true, true, '대화방 전체 백업 가능', true)
ㄴ 가독성이 떨어지는 예제
function 함수4({
회원등급,
글쓰기,
글읽기,
채널관리,
백업,
소셜로그인여부
}){
console.log('함수기능')
console.log(회원등급, 글쓰기, 글읽기, 채널관리, 백업, 소셜로그인여부)
return
}
함수4({
회원등급: "Gold",
글쓰기: true,
글읽기: true,
채널관리: false,
백업: "부분가능",
소셜로그인여부: true
})
//
함수기능
Gold true true false 부분가능 true
ㄴ 일반 예제
function 함수4({
회원등급,
글쓰기,
글읽기,
채널관리,
백업,
소셜로그인여부
}){
console.log('함수기능')
console.log(회원등급, 글쓰기, 글읽기, 채널관리, 백업, 소셜로그인여부)
return
}
함수4({
회원등급: "Gold",
채널관리: false,
백업: "부분가능",
소셜로그인여부: true
})
// 함수기능
Gold undefined undefined false 부분가능 true
ㄴ 입력되지 않은 값은 undefined
function 함수4({
회원등급 = 'Gold',
글쓰기 = true,
글읽기 = true,
채널관리 = true,
백업 = '부분가능',
소셜로그인여부 = true
}){
console.log('함수기능')
console.log(회원등급, 글쓰기, 글읽기, 채널관리, 백업, 소셜로그인여부)
return
}
함수4({
회원등급 : 'Silver',
소셜로그인여부: true
})
//
함수기능
Silver true true true 부분가능 true
function 함수4({
회원등급: 'Gold', // 안되는 이유?
글쓰기,
글읽기,
채널관리,
백업,
소셜로그인여부
}){
console.log('함수기능')
console.log(회원등급, 글쓰기, 글읽기, 채널관리, 백업, 소셜로그인여부)
return
}
함수4({
회원등급 : 'Silver',
소셜로그인여부: true
})
ㅡㅡㅡㅡㅡㅡㅡㅡ
function 함수({a = 2, b = 1, c = 3} = {}) {
console.log(a, b, c);
return a + b + c;
}
console.log(함수({a: 20, b: 30, c: 10}));
함수()
ㄴ 아규먼트 없이 호출 가능 (참고)
function 함수(a=10, b=20, c=30){
return a + b + c
}
함수()
ㄴ 작동 됨
function 함수({a=10, b=20, c=30}){
return a + b + c
}
함수()
ㄴ 작동 안 됨
function 함수({a=10, b=20, c=30}){
return a + b + c
}
함수({})
ㄴ 이 코드를 축소한 코드가 위의 참고 코드
let {one = 1, two = 2} = {one:100}
let {one = 1, two = 2} = {}
let {a=10, b=20, c=30} = undefined
https://ko.javascript.info/arrow-functions-basics
function 함수1(x, y) {
return x + y
}
let 함수2 = (x, y) => x + y
함수1.name
'함수1'
함수2.name
'함수2'
console.dir(함수1)
function 함수1(x, y) {
let z = x + y
return z
}
let 함수2 = (x, y) => {
let z = x + y
return z
}
호이스팅이 다르다.
hoisting :
호이스팅은 코드를 실행하기 전 변수선언/함수선언을 해당 스코프의 최상단으로 끌어올리는 것이 아니다.
호이스팅은 코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상을 말한다.
https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/
JS의 모든 선언은 호이스팅(선언이 먼저 메모리에 저장)이 일어난다.
그러나 let, const, class 이용한 선언문은 호이스팅이 되었지만 안된 것처럼 동작
이러한 현상은 일시적 사각지대(Temporal Dead Zone)에 빠지기 때문
중요한 포인트는 호이스팅이 안된 것은 아니라는 것!
오류가 나는 이유는 var 키워드는 선언과 함께 undefined로 초기화
let과 const는 초기화 되지 않는 상태로 선언만 메모리 저장
console.log(add1(10, 20)); // 30
console.log(add2(10, 20)); // 30
console.log(mul1); // undefined
console.log(mul1(10, 20)); // not a function
console.log(mul2); // Cannot access 'mul2' before initialization
console.log(mul2(10, 20)); // 위와 같은 애러
console.log(mul3) // mul3 is not defined, 호이스팅이 안되었기 때문
console.log(test);
function add1(x, y) {
return x + y;
}
function add2(x, y) {
return x + y;
}
var mul1 = function (a, b) {
return a * b;
};
let mul2 = function (a, b) {
return a * b;
};
test = 100;
let test = 100;