ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모던 자바스크립트 Deep Dive - 함수
    JavaScript 2021. 9. 16. 19:00

    keyword : [ 함수 , 식별자 , 함수 선언문, 함수 표현식 , 순수함수 , 부수 효과, 함수형 프로그래밍 ]

    함수 : 일련의 과정문으로 구현하고 코드 블록으로 감싸하나의 실행 단위로 정의 한 객체


    함수 정의


    // 함수 선언문
    
    function add( x , y ){
        return x + y ;
    }
    
    
    // 함수 리터럴
    
    let f = function add( x , y ){
        return x + y ;
    };
    
    
    // Function 생성자 함수
    
    let add = new Function('x','y','return x + y');
    
    
    
    // 화살표 함수
    
    let add = ( x , y ) => x + y ;

     

     


    함수 선언문


    함수 선언문표현식이 아닌 문이다.

    function ( x , y ){
        return x + y ;
    }

     

    표현식이 아닌 문은 변수에 할당 할 수 없다.

    let add = function add( x , y ){
        return x + y;
    }

    add 변수에 함수를 할당한게 아닌가??

    => 자바스크립트 엔진이
    => 함수 리터럴을
    => 함수 선언문(표현식이 아닌 문)과 함수 리터럴 표현식(표현식인 문) 중 둘 다 해석 될 수 있다.

     

    함수 몸체 외부에서 함수 이름으로 함수를 호출 할 수 없다. 즉, 식별자가 존재 하지 않는다.

    => 자바스크립트 엔진은 함수 선언문을 해석해 함수 객체를 생성한다.
    => 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성한다.

     

    함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가리키는 식별자로 호출 한다.

     

     


    함수 표현식


    함수는 일급 객체이다 = 함수를 값처럼 자유롭게 사용할 수 있다

     

    let add = function ( x , y ){
        return x + y ;
    }

     

     

     


    함수 생성 시점 과 호이스팅


    console.log(add(2,5));  // 7
    console.log(sub(2,5));  // TypeError
    console.log(sub);  // undefined
    
    function add( x , y ){
        return x + y;
    }
    
    let sub = function( x , y ){
        return x - y;
    }

     

    함수 선언문 : 함수 호이스팅
    함수 표현식 : 변수 호이스팅

     

     


    순수 함수와 비 순수 함수


     

    순수 함수 : 부수 효과가 없는 함수 , 동일한 input => 동일한 output
    비 순수 함수 : 부수 효과가 있는 함수

    부수 효과 : 함수 내부에서 변경하면 함수 외부의 객체가 변경되는 것

     

    함수형 프로그래밍 : 순수 함수와 보조 함수의 조합으로 불변성을 지향하는 프로그래밍 패러다임

    댓글

Designed by Tistory.