-
functionjavascript 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' 카테고리의 다른 글
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