<함수의 정의와 호출의 차이점>
함수의 정의는 컴퓨터에게 사용자가 만든 함수를 인식시키는 것을 의미한다.
따라서 함수의 정의만으로 함수가 실행되는 것은 아니다. 그때 실행을 하기 위해서 하는 것이 호출이다.
함수의 정의
: 함수 정의란 함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것을 말한다. 정의된 함수는 자바스크립트 엔진에 의해 평가되어 함수 객체가 된다. 함수를 정의하는 방식에는 4가지가 있다.
함수 선언문
function add (x,y){
Return x+y;
}
함수 표현식
var add = function (x,y){
return x+y;
}
Function 생성자 함수
var add = new function(‘x’, ‘y’, ‘return x+y’);
화살표 함수(es6)
var add = (x,y) => x+y;
모든 함수 정의 방식은 함수를 정의한다는 면에서는 동일하다. 단, 미묘하지만 중요한 차이가 있다.
출처 딥다이브
함수 정의
함수 선언
함수 정의(또는 함수 선언)는 다음과 같은 함수 키워드로 구성되어 있습니다:
• 함수의 이름
• 괄호 안에서 쉼표로 분리된 함수의 매개변수 목록
• 중괄호 { } 안에서 함수를 정의하는 자바스크립트 표현
예를 들어, 다음의 코드는 square라는 간단한 함수를 정의하였습니다:
function square(number) {
return number * number;
}
함수 square은 number라는 하나의 매개변수를 가집니다. 이 함수는 인수 (즉, number) 자체를 곱하여 반환하는 하나의 문장으로 구성되어 있습니다. return 문은 함수에 의해 반환된 값을 지정합니다.
return number * number;
기본 자료형인 매개변수(number와 같은)는 값으로 함수에 전달됩니다; 즉, 값이 함수로 전달됩니다. 그러나 함수가 매개변수의 값을 바꾸더라도 이는 전역적으로 또는 함수를 호출하는 곳에는 반영되지 않습니다.
만약 여러분이 매개변수로 (예: Array이나 사용자가 정의한 객체와 같이 기본 자료형이 아닌 경우)를 전달하거나 함수가 객체의 속성을 변하게 하는 경우, 다음의 예처럼 그 변화는 함수 외부에서 볼 수 있습니다:
함수 호출
함수를 정의하는 것은 함수를 실행하는 것이 아닙니다. 함수를 정의하는 것은 간단히 함수의 이름을 지어주고, 함수가 호출될 때 무엇을 할지 지정 해주는 것입니다. 사실 함수를 호출하는 것은 나타나있는 매개변수를 가지고 지정된 행위를 수행하는 것입니다. 예를 들어, 만약 여러분이 함수 square를 정의한다면, 함수를 다음과 같이 호출할 수 있습니다.
square(5);
위의 문장은 5라는 인수를 가지고 함수를 호출합니다. 함수는 이 함수의 실행문을 실행하고 값 25를 반환합니다.
함수는 호출될 때 범위 내에 있어야 합니다. 그러나 함수의 선언은 이 예에서와 같이, 호이스팅 될 수 있습니다. (코드에서 호출 아래에 선언문이 있습니다.):
console.log(square(5));
/ ... /
function square(n) { return n*n }
함수의 범위는 함수가 선언된 곳이거나, 전체 프로그램 에서의 최상위 레벨(전역)에 선언된 곳입니다.
비고: 위에 구문을 사용하여 함수를 정의하는 경우에만 작동합니다 (즉, function funcName(){} ). 아래와 같은 코드는 작동되지 않습니다. 이것이 의미하는 바는, 함수 호이스팅은 오직 함수 선언과 함께 작동하고, 함수 표현식에서는 동작하지 않습니다.
console.log(square); // square는 초기값으로 undefined를 가지고 호이스트된다.
console.log(square(5)); // TypeError: square는 함수가 아니다.
square = function (n) {
return n * n;
}
출처 mdn https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions