함수(function)는 자바스크립트 프로그램에 정의되어 있거나 자바스크립트 구현에 미리 정의되어 있는 실행 가능한 코드다. 함수는 한 번만 정의하면, 자바스크립트 프로그램 내에서 여러 번 실행될 수 있다. 함수는 계산 대상인 값들을 지정하는 전달인자(agument)나 매개변수(parameter)를 넘겨받을 수 있으며 계산 결과를 나타내는 값을 반환할 수도 있다. 자바스크립트 구현에는 특정 각에 대한 사인(sine) 값을 계산하는 Math.sin() 함수 같은 많은 수의 함수가 미리 정의되어 있다.
자바스크립트 프로그램에서는 다음과 같은 형태로 자신만의 함수를 정의할 수 있다.

function square(x)            // 함수 이름은 square이다. 전달인자 x 하나를 받는다.
{                                     // 함수 몸체가 여기서부터 시작한다.

return x*x;           // 이 함수는 전달인자를 제곱한 값을 반환한다.
}                                    // 여기서 함수가 끝난다.


함수가 일단 정의되면, 함수 이름에 이어서 옵션인 괄호로 둘러싸인 쉼표로 구분된 전달인자 목록을 적어주어 함수를 호출할 수 있다.(전달인자는 생략할 수도 있다). 다음은 몇 가지 함수 호출을 보여 준다.

y = Math.sin(x);
y = square(x);
d = compute_distance(x1, y1, z1, x2, y2, z2);
move();


자바스크립트의 중요한 특징 중 하나는 함수도 자바스크립트 코드로 조작할 수 있는 형태의 값이라는 점이다. 자바를 포함한 많은 언어에서 함수는 단지 언어의 문법적인 요소로서 존재한다. 함수는 단순히 정의하고 호출할 수 있는 것이지 데이터 타입은 아니다. 자바스크립트에서 함수가 실제로 값이라는 사실은 이 언어에 큰 유연성을 부여한다. 이것은 함수를 변수나 배열, 객체에 저장할 수 있으며 다른 함수의 전달인자로 넘겨 줄 수 있다는 것을 의미한다. 이런 점은 여러 면에서 유용하다. 함수를 정의하고 호출하는 방법과 함수를 데이터 값으로 사용하는 방법은 8장에서 논의한다.
함수도 숫자나 문자열처럼 값이므로 다른 값처럼 객체 프로퍼티에 할당될 수 있다. 함수가 어떤 객체의 프로퍼티로 할당되면(객체 데이터 타입과 객체 프로퍼티는 3.5절에서 설명한다), 흔히 그 객체의 메서드(method)라고 부른다. 메서드는 객체지향 프로그래밍에서 중요한 부분을 차지한다. 메서드에 관해서는 7장에서 좀 더 자세히 알아볼 것이다.