[JavaScript] Function

작성자
진행일시
2021/07/20
이메일

1. Function 정리

//Function(함수) //프로그램을 구성하는 기본적인 빌딩 블록 // 서브프로그램이라고 불리며 여러번 재사용가능하다는 장점 // 한가지의 업무나, 값을 계산하기위해서 쓰임 // 1. 함수 선언(Function declaration) //function name(param1, param2) {body.. return}; //one function === one thing (하나의 함수는 한가지의 일만 하도록 만들것) //naming : doSomething, command, verb (함수는 무언가 동작하는형식이라서 동사형식으로) // e.g createCardAndPoint -> createCard, createPoint function is object in JS (카드를만드는 함수와 포인트 함수로 나눌것) // 자바스크립트에서 function은 Object -> 그레서 이런걸 할 수있다. 1. 변수에할당, 2.parameter전달, 3.함수를 리턴할수 있음 function printHello(){ console.log('Hello'); } printHello(); //조금 더 유용한 Function(함수)만들기 function log(message){ console.log(message); } log('Hello@'); log(1234); // 2. Parameters // premitive parameters : passed by value (value가 전달) // object parameters : passed by reference(reference 가 전달) function changeName(obj) { obj.name = "coder"; }
JavaScript
복사

1-1 parameter에서 object를 parameter로 받을때

const ellie = {name : 'ellie'}; changeName(ellie); console.log(ellie); // 3. Default parameters (added in ES6) function showMessage(message, from = 'unknown'){ console.log(`${message} by ${from}`); } showMessage('Hi!');
JavaScript
복사

1-2 Rest Parameter

// 4. Rest parameter (added in ES6) function printAll(...args){ // ...은 배열형태로 전달된다는의미 for(let i =0; i < args.length; i++) { console.log(args[i]); } //배열출력의 간단한 예 -> for , of for(const arg of args) { console.log(arg); } args.forEach((arg) => console.log(arg)); } printAll('dream', 'coding', 'ellie'); console.log('5 : Local scope')
JavaScript
복사
// 5. Local scope let globalMassage = 'global'; // global variable function printMessage() { let message = 'hello'; console.log(message); // local variable console.log(globalMassage); function printAnother() { console.log(message); let childMessage = 'hello'; } } printMessage(); //6. Return a value; console.log('6 . Return a value') function sum (a, b) { return a + b ; } const result = sum(1, 2); console.log(`sum : ${sum(1,2)}`); console.log('7. Early Return, Early exit'); //7. Early Return, Early exit // bad function upgradeUser(user) { if(user.point > 10) { //long upgrade logic... } } // good function upgradeUser(user) { if (user.point <= 10){ return; } //long upgrade logic... } console.log('first class function'); // First-class function // functions are treated like any other variable (다른 변수와 마찬가지로 변수 할당) // can be assigned as a value to variable ( 변수 할당 ) // can be passed as argument to other functions. (파라미터 전달가능) // can be returnd by another function (리턴 가능) // 1. Function experession // a function declaration can be called earlier than it is defiend . (hoisted) // a funciton expression is created when the execution reaches it. const print = function() { //function을 선얺마과 동시에 print라는 변수에 할당, function에 이름없는것을 anonymous function(익명함수) console.log('print'); }; print(); const printAgain = print; printAgain(); const sumAgain = sum; console.log(sumAgain(1,3)); // 2. Callback function using function exprssion (함수를 전달해서 상황에 맞는 함수를 호출 시키는걸 콜백함수!!) function randomQuiz(answer, printYes, printNo){ if(answer === 'love you') { printYes(); } else{ printNo(); } } // anonymous function 익명함수 const printYes = function (){ console.log('yes'); }; //named function // better debugging in debugger`s stack traces // recursions const printNo = function print(){ console.log('no!'); }; randomQuiz('wrong', printYes, printNo); randomQuiz('love you', printYes, printNo); //Arrow function // always anonymous const simplePrint = function() { console.log('simplePrint!'); } // arrow function const simplePrint2 = () =>console.log('simplePrint!'); const add = (a,b) => a + b; const simpleMultiply = (a, b) => { // do something more return a * b; } // IIFE : Immediately Invoked Function Expression, 함수를 묶고 뒤에 호출한다는();표현하면 호출 (function hello(){ console.log('IIFE'); })(); //fun quiz time // function calculate(command, a, b) // command : (add, substract, divide, multiply, remainder) const cal = function calculate(command , a, b) { if (command == 'add') { return console.log(a + b); } else if(command == 'substract'){ return console.log(a-b); } else if (command == 'devide') { return console.log(a / b); } else if (command == 'multiply') { return console.log(a * b); } else if (command == 'remainder') { return console.log(a % b); } } cal('add', 2, 5 ); cal('substract', 2, 5); cal('devide', 2, 5); cal('multiply', 2, 5); cal('remiander', 2, 5);
JavaScript
복사