앞 절에서 우리는 square()라는 함수를 정의했다. 대부분의 경우 자바스크립트 프로그램에서 함수를 정의할 때 이 함수 정의 문법을 사용한다. 그러나 자바스크립트는 함수를 정의하는 함수 리터럴 문법도 제공한다. 함수 리터럴은 function 키워드, 함수 이름(생략할 수 있다), 괄호로 둘러싸인 함수 전달인자 목록, 마지막으로 중괄호로 구성된다. 즉, 함수 리터럴은 함수 이름을 명시하지 않는다는 것을 제외하고는 함수 정의와 모양이 동일하다. 함수 정의와 함수 리터럴 간에 큰 차이점은 함수 리터럴은 자바스크립트 표현식 내에 나타날 수 있다는 점이다. 따라서 다음과 같이 함수 정의 문법으로 square()를 정의하는 대신,

function square(x) { return x*x; }


함수 리터럴을 사용할 수 있다.

var square = function(x) { return x*x; }


이름 없는 함수를 프로그램 내에 리터럴 형태로 포함시킬 수 있게 한 최초의 언어인 Lisp 프로그램 언어를 기리는 의미에서 이러한 방식으로 정의된 함수를 람다함수(lambda function)라고 부른다. 지금은 프로그램에서 함수 리터럴을 사용할만한 명백한 이유를 떠올리기 힘들 테지만, 고급 스크립트를 작성할 때 함수 리터럴이 꽤나 편리하고 유용하게 사용될 수 있다는 것을 나중에 보여 주겠다.
함수를 정의하는 방법이 하나 더 있다. 그것은 전달인자 목록과 함수 몸체를 분자열 형태로 Function() 생성자에 전달하는 것이다. 예를 들어,

var square = new Function("x", "frturn x*x;");


이러한 형태로 함수를 정의하는 방법은 그리 유용하지 않다. 함수 몸체를 문자열로 표현하는 것이 불편하기도 하고 많은 수의 자바스크립트 구현에서 이러한 식으로 정의된 함수는 다른 두 방법으로 정의된 함수보다 비효율적으로 작동한다.