겁나게 헷갈렸던 Function의 매개변수(parameter), 인수(argument)의 사용법에 대해 적어보자. 이제 함수 밖에서 변수를 선언했을 때, 인자와 인수를 문법에 맞게 사용할 수 있게 되었으며, 매개변수, 인수의 역할과 위치를 정확히 알고 함수를 호출할 수 있다.....
함수의 구성요소
(출처 : https://lpla.tistory.com/128)
각 구성요소의 의미와 역할
// 함수 선언문
function add(x, y) {
return x + y;
}
// 함수 호출
console.log(add(x,y)) // 참조 에러 : 매개변수 x, y는 함수 몸체 안에서만 유효하다
console.log(add()) // NaN : 인수로 (없는 값, 없는 값)을 넣어서 매개변수가 받아서 더한 값은 NaN
console.log(add(2, 5)) // 7
함수 이름 add도 매개변수와 마찬가지로 함수 몸체 내에서만 참조할 수 있는 식별자이므로 함수를 호출할 수 없다. 그러나 자바스크립트 엔진이 생성된 함수를 호출하기 위해 함수 이름과 동일한 add라는 식별자를 암묵적으로 생성하고, 거기에 함수 객체를 할당한다.
// 함수 표현식
var add = function foo (x, y) {
retrun x + y;
};
console.log(foo(2, 5)) // 참조 에러 발생
console.log(add(2, 5)) // 7
함수를 호출할 때는 함수 이름이 아니라 함수 객체를 가리키는 식별자를 사용해야 한다. 함수 이름은 함수 몸체 내부에서만 유효한 식별자이므로 함수 이름으로 함수를 호출할 수 없다.
// 화살표 함수
const add = (x, y) => x + y;
console.log(add(2, 5)); // 7
// "I LOVE WECODE"의 문자열 길이를 콘솔에 찍는 함수
방법 1)
function getStringLength(y) {
return y.length;
}
let x = "I LOVE WECODE"
console.log(getStringLength(x)) // 13
방법2)
function getStringLength() {
let x = "I LOVE WECODE"
return x.length;
}
console.log(getStringLength()) // 13
방법3) 출력 안 됨❗
function getStringLength(x) {
let x = "I LOVE WECODE"
return x.length;
}
console.log(getStringLength()) // x가 이미 매개변수로서 선언되었기 때문에, 함수 안에서 x를 다시 선언하고 할당할 수 없다
방법4) 출력 안 됨❗
function getStringLength(x) {
return x.length;
}
let x = "I LOVE WECODE"
console.log(getStringLength(x)); // x는 이미 매개변수로 사용되었기 때문에 다시 함수 밖에서 선언되거나 함수를 호출할 때, 인수로 사용될 수 없다
방법5)
function getStringLength(x) {
return x.length;
}
let y = "I LOVE WECODE"
console.log(getStringLength(y)); // 13
방법6)
function getStringLength() {
return x.length;
}
let y = "I LOVE WECODE"
console.log(getStringLength(y)); // 매개변수를 생략할 수도 있다
방법7) 함수 밖에서 변수를 선언하고 함수 몸체 안에서 return value로 변수를 사용해도 무방
function myName(){
return name;
}
let name = "지연비"
console.log(myName()) // "지연비"
방법8) 함수 몸체 안에서 변수를 선언하고, return value로 사용한 후, 함수명으로 호출해도 됨
function myName(){
let name = "지연비"
return name;
}
console.log(myName()) // "지연비"
function add(a=0, b=0, c=0){
return a + b + c;
}
console.log(add(1,2,3)) // 6
console.log(add(1,2)) // 3
console.log(add(1)) // 1
console.log(add()) // 0
1) 반환문은 함수의 실행을 중단하고 함수 몸체를 빠져나가는 성질. return 뒤의 console.log는 실행되지 않는다
function multiply(x, y) {
return x * y;
console.log('실행되지 않는다');
}
console.log(multiply(1, 2)); // 2
2) 반환문은 생략이 가능하다
function foo() {
return;
}
console.log(foo()); // undefinded : 함수는 return을 실행한 후 암묵적으로 undefinded를 반환한다
👀반환문의 특징을 이용한 함수의 실행
function sum(x, y) {
if( x > 3) {
return
} return x + y
}
console.log(sum(1, 2)); // 3
console.log(sum(0, 2)); // 2