✊ 필오의 개발일지
Back to Posts
2018년 8월 24일

4/ 함수와 프로토타입 체이닝 (1)

4/ 함수와 프로토타입 체이닝 (1)

📒 인사이드 자바스크립트 중 메모해야할 부분만 적었습니다.


1. 함수 정의

함수 선언문

// 함수 선언문 function add(x, y) { return x + y; }

함수 표현식

// 함수 표현식 var add = function (x,y){ return x + y; }

기명함수 표현식

// add 변수가 sum 함수를 참조한다. // 때문에 외부에서 sum함수에 접근할 수 없고, add변수를 통해 접근가능하다. var add = function sum(x, y) { return x + y; }; console.log(add(3, 4)); //7 console.log(sum(3, 4)); //error
function add(x, y) { return x + y; } // 위 함수는 자바스크립트 엔진에 의해서 아래와 같은 형태로 변환되다. var add = function add(x, y) { return x + y; }; // 팩토리얼 함수 var factorialVar = function factorial(n) { if (n <= 1) { return 1; } return n * factorial(n - 1); }; factorialVar(3); // 6 factorial(3); // error

Function() 생성자 함수

함수도 일반 객체처럼 값으로 취급된다. (일급객체)

var add = new Function('x', 'y', 'return x + y');

함수 호이스팅


2. 함수 객체: 함수도 객체다.

2.1 자바스크립트에서는 함수도 객체다.

함수 자체가 일반 객체처럼 프로퍼티들을 가질 수 있다.

function add(x,y){ return x + y; } add.result = add(3,2); add.status = 'OK';

2.2 자바스크립트에서 함수는 값으로 취급된다. (일급객체)

자바스크립트에서 함수는 일급객체이다.

이 특징때문에 함수형 프로그래밍이 가능하다. 자바스크립트의 함수를 제대로 이해하려면 함수가 일급 객체이며 이는 곧 함수가 일반 객체처럼 으로 취급된다는 것을 이해해야한다.

2.2.1 변수나 프로퍼티의 값으로 할당

const foo = 100; const bar = function(){return 100;}; console.log(bar()); // 100 const obj = {}; obj.baz = function(){return 200;} console.log(obj.baz()) // 200; /* obj = { baz: function(){reutrn 200} } */

2.2.2 함수 인자로 전달.

2.2.3 리턴값으로 활용.

클로저

2.3 함수 객체의 기본 프로퍼티

함수 객체만의 표준 프로퍼티가 정의되어 있다.

ECMA5 스크립트 명세서에는 모든 함수가 length와 prototype프로퍼티를 가져야 한다도 기술되어있다.

length, prototype 이외의 프로퍼티는 ECMA 표준이 아니다.

  1. name
  1. caller
  1. arguments
  1. __proto__

Function.prototype객체의 프로토타입 객체는?

대박 처음에 프로토타입 공부할 때 한참 헷갈렸던 부분

ECMAScript 명세서에서는 예외적으로 Function.prototype 함수 객체의 부모는 Object.prototype 객체라고 설명하고 있다.

Function.prototype 객체가 표준으로 가지는 프로퍼티나 메서드.

2.3.1 length

인자의 개수를 나타내고 있다.

2.3.2 prototype 프로퍼티

모든 함수는 객체로서 prototype 프로퍼티를 갖고 있다.

function Person(name, gender) { this.name = name; this.gender = gender; this.sayHello = function () { console.log('Hi! my name is ' + this.name); }; } var foo = new Person('Lee', 'male'); console.dir(Person); console.dir(foo); console.log(foo.__proto__ === Person.prototype); // ① true console.log(Person.prototype.__proto__ === Object.prototype); // ② true console.log(Person.prototype.constructor === Person); // ③ true console.log(Person.__proto__ === Function.prototype); // ④ true console.log(Function.prototype.__proto__ === Object.prototype); // ⑤ true

(이미지출처 : https://poiemaweb.com/js-prototype )


3. 함수의 다양한 형태

3.1 콜백함수 함수 표현식에서 함수이름은 꼭 붙이지 않아도 되는 선택사항이다. (익명함수)

익명함수의 대표적인 용도가 콜백함수.

콜백함수는 코드를 통해 명시적으로 호출하는 함수가 아니라, 개발자는 단지 함수를 등록하기만 하고, 어떤 이벤트가 발생하거나 특정 시점에 도달했을 때 시스템에서 호출되는 함수를 말한다.

또한, 특정 함수의 인자로 넘겨서, 코드 내부에서 호출되는 함수 또한 콜백함수가 될 수 있다.

3.2 즉시실행함수

= 함수를 정의함과 동시에 바로 실행하는 함수

(function(name){ console.log('test') })()

사용하는 곳

  1. 초기화 코드
  1. 자바스크립트 라이브러리나 프레임워크 소스들 (like Jquery)
(fucntion(window, undefined){ ... })(window)

3.3 내부 함수

함수 코드 내부에서 함수 정의

예_ html을 만드는 함수에서 받은 data에서 특정 추가작업을 해야하고, 공용함수로 쓰이지 않을 경우

function parent() { const a = 100; const b = 200; function child() { const b = 300; console.log(a); console.log(b); // 내부에서 참조가 시작하므로, 내부에서 참조가능했다면 부모스코프까지 가지 않는다. } child(); } parent(); // 100 300 child(); //error
function parent() { const a = 100; function child() { console.log(a); } return child; } var inner = parent(); // inner에 child 함수변수가 리턴된다. inner(); // 클로저

3.4 함수를 리턴하는 함수

Previous4/ 함수와 프로토타입 체이닝 (2)
Next3/ 자바스크립트 데이터 타입과 연산자

Related

© 2025 Felix