함수정의 방법
// 1.함수 선언문으로 정의
function square(x) {return x*x};
// 2.함수 리터럴로 정의
let square = function(x) {return x*x};
// 3.Function 생성자로 정의
let square = new Function('x','return x*x')
// 4.화살표 함수
let square = x => x*x;
자바스크립트 엔진은 함수 선언문을 프로그램의 첫머리 또는 함수의 첫머리로 끌러올린다. 따라서 함수 선언문으로 정의한 함수는 호출문이 그보다 앞에 위치해도 호출할 수 있다. 그러나 함수 리터럴,Function 생성자,화살표 함수 표현식으로 정의한 함수는 변수에 그 함수의 참조를 할당해야 비로소 사용할 수 있는 상태가 된다.
중첩함수
- 특정 함수의 내부에 선언된 함수를 가리켜 그 함수의 중첩함수라고 부른다.
- 중첩 함수의 참조는 그 중첩 함수를 둘러싼 외부 함수의 지역 변수에 저장되므로 외부 함수의 바깥에서는 읽거나 쓸 수 없다.
- 자신을 둘러싼 외부 함수의 인수와 지역 변수에 접근할 수 있다.
function norm(x) {
let sum2 = sumSquare();
return Math.sqrt(sum2);
function sumSquare() {
let sum = 0;
for(let i=0;i<x.length;i++) sum += x[i]*x[i];
return sum;
}
}
const a = [2,1,3,5,7]
console.log(norm(a))// 9.234234234234;
함수 호출하기
// 1.함수호출 - 함수의 참조가 저장된 변수 뒤에 그룹 연산자인 ()를 붙여서 함수를 호출
let s = square(5);
// 2.메서드 호출 - 메서드를 호출할 때는 그룹 연산자인 ()를 붙여서 호출
// 객체의 프로퍼티에 저장된 값이 함수 타입일 때는 그 프로퍼티를 메서드라고 부른다.
obj.m = function(){...};
obj.m();
// 3.생성자 호출 - 함수 또느 메서드를 호출할 때 함수의 참조를 저장한 변수 앞에 new 키워드를 추가하면 함수가 생성자로 동작
let obj = new Object()