Til-2 함수와 프로토타입 체이닝
2021.06.28
-
리터럴 : 표기법
a. 객체 리터럴: 객체를 생성하는 표기법
b. 함수 리터럴: 함수를 생성하는 표기법
var foo={name:'foo', age:30, gender: 'male}; //객체리터럴 function add(x,y){ //함수 리터럴 return x+y; }
-
함수: javascript에서 함수도 일반 객체처럼 값으로 취급
-
함수표현식
a. 변수에 함수를 값으로 할당, 보통 익명함수를 할당함
b. 기명함수를 할당해도 기명으로 사용할 수 없다
var add= function(x,y){ //add: 함수변수 return x+y; } var add= function sum(x,y){ return x+y; } //위 add 함수는 스크립트 엔진이 아래와 같이 변경시킴 var add= function **add**(x,y){ return x+y; } add(3,4) //7 sum(5,6) //에러 발생 , 기명함수 값 사용 불가
-
익명함수: 이름이 없는 함수형태
-
함수 호이스팅
- 발생원인: 스크립트의 변수 생성과 초기화 작업이 분리돼서 진행됨
- 함수 선언문 형태로 정의한 함수의 유효범위는 코드의 맨 처음부터 시작함
- 호이스팅 문제로 함수 선언문을 사용 안하는 걸 추천하는 사람도 있음
add(2,3); //5 function add(a,b){ return a+b; }; add(3,4); //7
-
add 함수코드는 함수 객체 add의 [code] 프로퍼티에 저장됨
-
함수는 일급객체
a. 변수나 배열의 요소에 할당가능
b. 함수의 인자로 전달 가능
c. 함수의 리턴값으로 사용 가능
d. 동적으로 프로퍼티생성가능
var foo = function(){ return function(){ console.log("함수에함수"); } } var baz = foo(); baz();
-
Function.prototype 객체: 모든 함수 객체의 부모역할을 하는 프로토타입객체(—proto—)
a. constructor 프로퍼티
b. toString 메서드
c. apply ,call , bind 프로퍼티
-
prototype 프로퍼티
- 모든 함수는 객체로서 prototype 프로퍼티를 가지고 있다
- 부모를 나타내는 —prototype—와 혼동하면 안됨
-
함수 객체와 프로토타입 객체와의 관계
- 아래와 같이 서로 밀접하게 연결되어있다
- 함수 객체의 프로토타입의 생성자는 매핑된 함수를 가리킴(myFunction)
myFunction(함수객체) myFunction.prototype(프로토타입 객체) prototype 프로퍼티 -----> <-------consturctor 프로퍼티
-
콜백함수: 어떤 이벤트가 발생했거나 특정시점에 도달했을때 시스템에서 호출되는 함수
ex) dom에서 이벤트 클릭시 함수실행
-
즉시 실행 함수
(function (name){ console.log('my name is ', name) })('foo');
댓글을 작성해보세요.