-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunction.js
More file actions
145 lines (124 loc) · 3.28 KB
/
function.js
File metadata and controls
145 lines (124 loc) · 3.28 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
// Function
// - fundamental building block in the program
// - subprogram can be used multiple times
// - performs a task or calculates a value
// 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 printHello(){
console.log('Hello')
}
printHello()
function log(message){
console.log(message)
}
log('Hello@@@@@')
log(1234)
// 2. Parameters
// premitive parameters: passed by value
// (premitive 타입은 메모리에 value가 저장되어있기 때문에 그대로 전달)
// object parameters: passed by reference
// (object는 ref가 전달되어짐 )
function changeName(obj){
obj.name = 'coder'
}
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!')
// 4. Rest parameters (added in ES6)
function printAll(...args){
console.log(args)
for(let i =0; i <args.length; i++){
console.log(args[i])
}
for(const arg of args){
console.log(arg)
}
}
printAll('dream','coding','ellie')
// 5. Local scope
let globalMessage = 'global'; // global variable
function printMessage (){
let message = 'hello';
console.log(message) // local variable
console.log(globalMessage)
function printAnother(){
console.log(message)
let childMessage = 'hello'
}
}
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
function upgradeUser(user){
if(user.point <= 10){
return;
}
// long upgrade logic...
}
// First-class function
// functions are treated like any other variable
// can be assigned as a value to variable
// can be passed as an argument to orther functions.
// can be returned by another function
// 1. Function expression
// a function declaration can be called earlier than it is defiend. (hoisted)
// a function expression is created when the execution reaches it.
const 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 expression
function randomQuiz(answer, printYes, printNo){
if(answer==='love you'){
printYes()
}else{
printNo()
}
}
const printYes = function(){
console.log('yes!')
}
const printNo = function(){
console.log('no!')
}
randomQuiz('wrong', printYes, printNo)
randomQuiz('love you', printYes, printNo)
// Arrow function
// always anonymous
const simplePrint = () => console.log('simplePrint!')
const add = (a,b) => a+b
const add = function(a,b) {
return a+b
}
const simpleMultiply = () =>{
// do something more
return a * b
}
// Fun quiz time
// function calculate(command,a,b)
// command: add, substract, divide, multiply, remainder