자바스크립트에서 함수는 Object.prototype을 프로토타입으로 갖는 객체이며 프로그램에 의해 다뤄질(manupulated) 수 있는 값(value) 으로, 자바스크립트 코드에서 정의 되어 여러번 호출되거나 실행될 수 있다.
함수는 식별자(identifier)로 이루어진 리스트를 포함하는 형태로 정의 될 수 있는데 이를 매개변수(parameter)라고 하며 매개변수는 함수 안에서 지역변수처럼 작동한다. 이러한 함수를 호출하기 위해서는 매개변수로 들어가야할 인자(argument)를 포함하여야 하며 인자들은 값(value)이어야 한다.

값으로써의 함수(일급 객체)

자바스크립트 함수가 일급 객체라는 말은 함수를 값으로 쓸 수 있다. 따라서 함수는 변수에 할당될 수 있고, 객체의 속성으로도, 함수의 원소로 쓰이는 등 값의 역할을 수행 할 수 있다. 특히 함수가 객체의 속성으로 할당 된다면 우리는 그 함수를 method 라고 부른다. 심지어 함수가 배열에 할당된 경우에는 함수의 이름조차 필요하지 않는다.

let a = [x => x*x, 20]; // An array literal
a[0](a[1]) // => 400

객체로써의 함수

함수는 당연하게도 자바스크립트의 원시자료형(primitive value)이 아니다. 이 뜻은 함수 또한 속성을 가질 수 있다는 말이다. 이 특성은 매우 유용하게 쓰일 수 있는데, 특정 함수 내에서만 쓰이는 변수 중에 함수가 기능을 마치더라도 기억되기를 원하는 경우가 있다. 가령 어떤 버튼의 클릭 횟수를 기록하고자 하는데 이를 함수 내 지역변수로 선언하게 되면 기능을 마쳤을 때 기록이 초기화되고, 전역 변수로 선언하기엔 실수를 유발할 수 있는 불편한 경우이다. 이 때 함수에 속성을 더해주면 편하게 처리할수 있다.

// It uses a property of itself to remember the next value to be returned.
function uniqueInteger() {
return uniqueInteger.counter++; // Return and increment counter property
}
uniqueInteger.counter = 0;

uniqueInteger() // => 0
uniqueInteger() // => 1
profile
latemarch

0개의 댓글

Powered by GraphCDN, the GraphQL CDN