-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunction.js
140 lines (122 loc) · 3.06 KB
/
function.js
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
"use strict";
// 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. createCarAndPoint -> vreateCared, createPoint
// function is obect in JS
function prinHello() {
console.log("Hello");
}
prinHello();
function log(message) {
console.log(message);
}
log("안뇽하셍용");
log(1234);
// 2. Parameter
// premitive parameters: passed by value
// object parameters: passed by reference
function changeName(obj) {
obj.name = "coder";
}
const och = { name: "och" };
changeName(och);
console.log(och);
// 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 prinAll(...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));
}
prinAll("dream", "coding", "och");
// 5. Local scope
let globalMessage = "global"; // global variable
function printMessage() {
let message = "hello";
console.log(message); // local variable
console.log(globalMessage);
}
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 oher functions.
// can be returned by another function
// 1. Function expression
// a function declaration can be called earlier than it is defiend.(hoised)
// 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();
}
}
// 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!");
};
const simplePrint = () => console.log("simplePrint!");
const add = (a, b) => a + b;
// IIFE : Immediatley Invoked Function Expression ()로 묶어 바로 실행
(function hello() {
console.log("IIFE");
})();
// Quiz!