funtion키워드 함수명 (매개변수(=인자)) { return키워드 값반환 표현식; };
funtion add(a,b){ return a+ b; };
return
문으로 결과값을 반환할 수 있다. 이를 반환값이라 한다.//리터럴이란? ✨ : 값을 표기하는 약속된 기호,문자,방법이다.
1; //정수리터럴
'Hello'; //문자열 리터럴
[1,2,3]; //배열 리터럴
{age:31}; //객체 리터럴
function(){} //함수 리터럴
// 기명 함수 표현식(named function expression)
var foo = function multiply(a, b) {
return a * b;
};
// 익명 함수 표현식(anonymous function expression)
var bar = function(a, b) {
return a * b;
};
console.log(foo(10, 5)); // 50
‼️주의‼️
- 할당된 변수는 함수명이 아니라 할당된 함수를 가르키는 참조값을 저장함
- 따라서 함수 호출시 기명함수의 함수명이 아니라
- 함수를 가르키는 변수명을 사용해야한다.
- 함수 표현식에서 사용한 함수명은 외부 코드에서 접근 불가능하기 때문이다.
- 근데 함수 선언문에서는 함수명으로 호출해도 왜 에러가 나지 않았지?
- 정답은 자바스크립트 엔진에 의해 함수표현식으로 형태가 변경되었기 때문!
- 결과적으로 함수선언문도 함수표현식과 동일하게 함수 릴터럴방식으로 정의된 것이다.
//기명함수의 함수명으로 호출 시 에러뜸 console.log(multiply(10, 5)); // Uncaught ReferenceError: multiply is not defined
//예시
let square = new Function('number','return number * number');
console.log(square(10)) //100
function add(a, b) {
return a + b;
}
const sum = add;
console.log(sum(1, 2)); //3
console.log(add(1, 2)); //3
arguments
프로퍼티caller
프로퍼티length
프로퍼티name
프로퍼티__proto__
접근자 프로퍼티prototype
프로퍼티//매개변수(=인자,parameter)전달
function add(a = 1, b = 1) { // 매개변수 기본값 a = 1, b = 1
console.log(a); //3
console.log(b); //4
console.log(arguments); //[Arguments] { '0': 3, '1': 4, '2': 5 }
console.log(arguments[1]); //4
return a + b;
}
//인수(=argument)전달
console.log(add(3,4,5)); //7
...
// Rest 매개변수 Rest Parameters
function sum(a, b, ...numbers) {
console.log(a); //1
console.log(b); //2
console.log(numbers); //[3, 4, 5, 6, 7, 8]
}
sum(1, 2, 3, 4, 5, 6, 7, 8);
return
= undefined
return
만 있을 경우, 함수가 즉시 종료된다.✨return
이후에 다른 구문이 존재할 경우,//즉시 실행 함수는 소괄호로 감싸준다.
(function () {
// ...
}());
function parent(param) {
let parentVar = param;
function child() {
let childVar = 'lee';
console.log(parentVar + ' ' + childVar); // Hello lee
}
child();
console.log(parentVar + ' ' + childVar);
// Uncaught ReferenceError: childVar is not defined
}
parent('Hello');
n! = n * (n - 1) * (n - 2) * ...*1
function double(num) {
return num * 2;
}
// doubleNum 함수는 고차 함수이다. (다른 함수를 인자로 받음)
// doubleNum 함수의 인자 func에 함수가 들어올 경우
// func은 doubleNum의 콜백 함수이다.
function doubleNum(func, num) {
return func(num);
}
// 아래의 경우 double은 doubleNum의 콜백 함수이다.
doubleNum(double, 5);
function display(num) {
num = 5; // ❌
console.log(num);
}
const value = 4;
display(value);
console.log(value);
function displayObj(obj) {
obj.name = 'Bob'; // ❌❌❌❌❌❌ 외부로 부터 주어진 인자(오브젝트)를 내부에서 변경 ❌
console.log(obj);
}
const ellie = { name: 'Ellie' };
displayObj(ellie);
console.log(ellie);
function changeName(obj) {
return { ...obj, name: 'Bob' };
}
function fullName(firstName, lastName) {
return `${firstName} ${lastName} ✋`;
}
let lastName = '김';
let firstName = '지수';
console.log(fullName(firstName, lastName)); //지수 김 ✋