Til-2 함수와 프로토타입 체이닝

  • 리터럴 : 표기법

    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();
    

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d7fc02b6-0578-4f55-9860-305a45f6d423/Untitled.png

  • Function.prototype 객체: 모든 함수 객체의 부모역할을 하는 프로토타입객체(—proto—)

    a. constructor 프로퍼티

    b. toString 메서드

    c. apply ,call , bind 프로퍼티

  • prototype 프로퍼티

    • 모든 함수는 객체로서 prototype 프로퍼티를 가지고 있다
    • 부모를 나타내는 —prototype—와 혼동하면 안됨
  • 함수 객체와 프로토타입 객체와의 관계

    • 아래와 같이 서로 밀접하게 연결되어있다
    • 함수 객체의 프로토타입의 생성자는 매핑된 함수를 가리킴(myFunction)
    myFunction(함수객체)       myFunction.prototype(프로토타입 객체)
    prototype 프로퍼티  -----> 
    									  <-------consturctor 프로퍼티
                        
    

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b3508748-4177-4df2-ac8a-fecdc5fcc711/Untitled.png

  • 콜백함수: 어떤 이벤트가 발생했거나 특정시점에 도달했을때 시스템에서 호출되는 함수

    ex) dom에서 이벤트 클릭시 함수실행

  • 즉시 실행 함수

    (function (name){
        console.log('my name is ', name)
    })('foo');
    

댓글을 작성해보세요.

채널톡 아이콘