-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path03-functions.js
More file actions
66 lines (55 loc) · 1.9 KB
/
Copy path03-functions.js
File metadata and controls
66 lines (55 loc) · 1.9 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
/**
* MATERI: FUNCTIONS (DEEP DIVE)
* Menjelaskan dari dasar hingga konsep Advanced.
*/
// 1. Function Declaration vs Expression
// Declaration: Terkena Hoisting (bisa dipanggil sebelum dibuat)
console.log(sayHello("Budi"));
function sayHello(name) {
return `Halo, ${name}!`;
}
// Expression: Tidak terkena hoisting, lebih aman & modular
const sayGoodbye = function (name) {
return `Selamat tinggal, ${name}`;
};
// 2. Arrow Functions (ES6+)
// Perbedaan utama: Tidak memiliki 'this' sendiri (Lexical This)
const multiply = (a, b) => a * b;
const greetInOneLine = (name) => `Hi ${name}!`; // Shorthand jika 1 parameter
// 3. Default Parameters
// Mencegah error 'undefined' jika argumen lupa diisi
const registerUser = (username = "Guest", role = "Member") => {
return `User: ${username}, Role: ${role}`;
};
// 4. Anonymous Functions & Callbacks
// Fungsi yang dikirim sebagai argumen ke fungsi lain
const processNumbers = (a, b, callback) => {
const result = a + b;
return callback(result);
};
const displayResult = (val) => `Hasil kalkulasi adalah: ${val}`;
console.log(processNumbers(10, 5, displayResult));
// 5. Closures (Konsep Penting!)
// Fungsi yang "mengingat" lingkup (scope) asalnya bahkan setelah dieksekusi
function createCounter() {
let count = 0; // Private variable
return function () {
count++;
return count;
};
}
const counter = createCounter();
console.log("Counter 1:", counter()); // 1
console.log("Counter 2:", counter()); // 2
// 6. IIFE (Immediately Invoked Function Expression)
// Fungsi yang langsung berjalan saat didefinisikan (isolasi scope)
(() => {
const secret = "Ini tersembunyi";
console.log("IIFE Berjalan otomatis...");
})();
// 7. Rest Parameters (...)
// Menerima jumlah argumen yang tidak terbatas ke dalam Array
function sumEverything(...nums) {
return nums.reduce((acc, curr) => acc + curr, 0);
}
console.log("Total Rest:", sumEverything(1, 2, 3, 4, 5));