-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunction.js
More file actions
171 lines (146 loc) · 3.92 KB
/
function.js
File metadata and controls
171 lines (146 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
'use strict';
// Function
// - fundamental building block in the program
// - subprogram can be used multiple times(재사용 가능)
// - performs a task or calculates a vlaue
// 1. Function declaraion
// funcion name(param1, param2) { body... return; }
// one funcion === one thing
// naming: doSomething, command, verb
// e.g. createCardAndPint -> createCard, createPoint
// funcion is object in JS
function printHello() {
console.log('Hello');
}
printHello();
function log(message) {
console.log(message);
}
log('Hi!');
log(1234);
// 2. Parameters
// premitive parameters: passed by value
// object parameters: passed by reference
function changeName(obj) {
obj.name = 'coder';
}
const sill = { name: 'sill'};
changeName(sill);
console.log(sill);
// 3. Default parameters (added in ES6)
function showMessage(message, from = 'unknown') { // showMessage에 from param이 없을 경우(undefined) Default로 unknown을 넣어주겠다는 의미!
console.log(`${message} by ${from}`);
}
showMessage('Hi!');
// 4. Rest parameters (added in ES6)
function printAll(...args) { // ... -> 배열 형태로 전달
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
for (const arg of args) { // 위와 상동
console.log(arg);
}
args.forEach((arg) => console.log(arg)); // 위와 상동
}
printAll('dream', 'coding', 'sill');
// 5. Loop scope
let globalMessage = 'global'; // global variable
function printMessage() {
let message = 'hello';
console.log(message); // local variable
console.log(globalMessage);
function printAnother() {
let childMessage = 'hi';
}
// console.log(childMessage); // error
}
printMessage();
// 6. Return a value
function sum(a, b) {
return a + b;
}
const result = sum(1, 2); // 3
console.log(`sum: ${sum(1, 2)}`);
// 7. Early return, early exit
// bad
function upgradeUser(user) {
if (user.point > 10) {
// long upgrade logic...
}
}
//good
// bad
function upgradeUser(user) {
if (user.point <= 10) {
return;
}
// long upgrade logic...
}
// First-class funcion
// functions are treated like any other variable
// can be assigned as a value to variable
// can be passed as an argument to other functions
// can be returned by another function
// 1. Function expression
// a function declaration can be called earlier than it is definded. (hoisted)
// a funtion expression is created when the execution reaches it.
const print = function () { // anonymous funcion
console.log('print');
}
print();
const printAgain = print;
printAgain();
const sumAgain = sum;
console.log(sumAgain(1, 3));
// 2. Callback function using funcion expression
function randomQuiz(answer, printYes, printNo) {
if(answer === 'love you') {
printYes();
} else {
printNo();
}
}
// anonymous funcion
const printYes = function () {
console.log('yes!');
};
// named funcion
// 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 funcion
// always anonymous
// const simplePrint = function() {
// console.log('simplePrint!')
// };
const simplePrint = () => console.log('simplePrint!');
const add = (a, b) => 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
function calculate(command, a, b) {
switch(command) {
case 'add':
return a + b;
case 'substract':
return a - b;
case 'divide':
return a / b;
case 'multiple':
return a * b;
case 'remainder':
return a % b;
default:
throw Error('unknown command');
}
}
console.log(calculate('add', 2, 3));