ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • function
    javascript 2020. 5. 28. 01:36

    function 도 object의 하나이다. function 이 다른 function의 인자값(argument)로 들어갈 수 있다.

    var years = [1999, 1980, 2012, 1983, 1933]; 
    
    function arrayCalc(arr, fn){
        var arrRes = [];
        for(var i = 0; i < arr.length ; i++){
            arrRes.push(fn(arr[i]));
        }
        return arrRes;
    }
    
    function claculateAge(el) {
        return 2016 - el;
    }
    
    function isFullAge(el){
        return el >= 18;
    }
    
    function maxHeartRate(el){
        if(el >= 18 && el <= 81){
            return Math.round(206.9 - (0.67 * el)) ;
        } else {
            return -1;
        }
    
        
    }
    var ages = arrayCalc(years, claculateAge);	//여기서 claculateAge는 call back function 이라고 불린다.
    console.log(ages);
    
    var fullAges = arrayCalc(ages, isFullAge);	//여기서 isFullAge는 call back function 이라고 불린다.
    console.log(fullAges);
    
    var rates = arrayCalc(ages, maxHeartRate);	//여기서 maxHeartRate는 call back function 이라고 불린다.
    console.log(rates);

     

     

     

    // functions Returning functions
    
    function interviewQuestion(job){
        if(job === 'designer'){
            return function(name){
                console.log(name + ', can ou please explain what UX design is?');
            }
        }
        else if(job === 'teacher'){
            return function(name){
                console.log("What subject do you teach, " + name + '?');
            }
        }else {
            return function(name){
                console.log('Hello' + name + ', What do you do?');
            }
        }
    }
    
    var teacherQuestion = interviewQuestion('teacher');
    teacherQuestion('John');	//What subject do you teach, John?
    /*
    teacherQuestion은 interviewQuestion('teacher')과 같기 때문에 
    function(name){
                console.log(name + ', can ou please explain what UX design is?');
            }
    을 리턴한 값과 같고 그래서 teacherQuestion에 'John'을 넣어 주면
    What subject do you teach, John?이라는 결과가 반환되는 것이다.
    */
    var designerQuestion = interviewQuestion('designer');
    designerQuestion('mark');	//mark, can ou please explain what UX design is?
    designerQuestion('mike');	//mike, can ou please explain what UX design is?
    
    interviewQuestion('teacher')('Mark');	What subject do you teach, Mark?
    /*
    왼쪽부터 오른쪽으로 실행이 되어 interviewQuestion('teacher')여기까지가
    function(name){
                console.log("What subject do you teach, " + name + '?');
            }을 리턴하게 되고 이 function에 Mark가 인자(argument)로 들어가게 되어
    What subject do you teach, Mark?가 콘솔에 출력된다.
    */
    
    

     

     

    //Immediately Invoked Function Expression (IIFE)
    
    // function game(){
    //     var score = Math.random() * 10;
    //     console.log(score >= 5 );
    // }
    // game();
    
    //위의 function game() 에서 score를 숢기고 싶을때
    //IIFE를 사용한다.
    
    (function (){
        var score = Math.random() * 10;
        console.log(score >= 5 );
    }
    )();
    
    /*
    리유저블하지 않지만
    IFFE를 사용하는 이유는
    바깥 스코프로부터 숨겨지는 새로운 스코프를 만들어서,
    안전하게 변수를 넣을 수 있는 것이다.
    이걸로 데이터보안 data privacy를 얻을 수 있게 해준다.
    또한 다른 변수에 상관받지 않는 변수를 사용할 수 있게 된다.
    */

     

    참조 : Udemy - The Complete JavaScript Course 2020 : Build Real Projects!

    https://preamtree.tistory.com/116

     

    JavaScript에서는 함수(Function)도 객체(Object)다.

    지난 포스팅에서 배열(Array)가 객체(Object)로 취급된다는 것을 확인했다. 그리고 JavaScript에서는 함수(Function)도 객체다. 본격적인 이야기를 시작하기 전에, 1급객체(First-Class Citizens)에 대해 짚고 넘

    preamtree.tistory.com

     

    'javascript' 카테고리의 다른 글

    call, apply, bind  (0) 2020.05.28
    closure  (0) 2020.05.28
    Creating Object  (0) 2020.05.27
    자바스크립트 this  (0) 2020.05.22
    자바스크립트 Object  (0) 2020.05.22

    댓글

Designed by Tistory.