Skip to content

Commit

Permalink
docs: Menambahkan Dokumentasi Function Scope dan Keyword This (#366)
Browse files Browse the repository at this point in the history
* docs: Menambahkan Dokumentasi Function Scope dan Keyword This

* fix: Memperbaiki functionScope.js  dan /007_Keyword_This/example.js

* fix: Memperbaiki functionScope.js

* fix: Menambahkan no-use-before-define
  • Loading branch information
azhardanii authored Feb 4, 2023
1 parent 3e235d5 commit 7885b5a
Show file tree
Hide file tree
Showing 4 changed files with 218 additions and 1 deletion.
54 changes: 53 additions & 1 deletion learn/Basic/008_function/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,59 @@ function contohReturningFunction() {
console.log(contohReturningFunction);
```

Lihat contoh lengkap untuk [Basic Function](functionBasic.js), [Argumen dan Parameter](parameterAndArgument.js), dan [Returning function](functionReturn.js).
### Lingkup Function

Function juga memiliki lingkup untuk menangani variabel yang ingin digunakan, apabila variabel didefinisikan didalam function maka variabel tersebut tidak dapat digunakan jika function tidak dijalankan yang disebut sebagai `Function Scope`.

Contoh 1. Mendefisikan variabel didalam fungsi :

```js
function memancing() {
let ikan = 'Lele'
console.log(ikan)
}

console.log(ikan) // Error: ikan tidak terdefinisikan
memancing() // Lele
```

Variabel ikan hanya dapat digunakan saat fungsi memancing() dijalankan karena variabel ikan didefinisikan didalam fungsi sehingga tidak dapat digunakan apabila fungsi memancing() tidak dijalankan, ini lah yang disebut lingkup fungsi (Function Scope).

Contoh 2. Mendefisikan variabel diluar fungsi :

```js
let ikan = 'Gurame'
function kolamIkan() {
console.log(ikan)
}

console.log(ikan) // Gurame
kolamIkan() // Gurame
```

Variabel ikan dapat digunakan saat fungsi kolamIkan() dijalankan maupun langsung menggunakannya karena variabel ikan didefinisikan diluar fungsi sehingga variabel tersebut merupakan variabel dengan lingkup global (Global Scope).

Contoh 3. Deklarasi variabel didalam dan diluar fungsi :

```js
let noktunal = 'Kelelawar'
let diurnal = 'Gajah'

function hewan() {
let nokturnal = 'Burung Hantu'
console.log(nokturnal)
console.log(diurnal)
}

console.log(noktunal) // Kelelawar
console.log(diurnal) // Gajah
hewan() // Burung Hantu & // Gajah
```

Variabel nokturnal diluar fungsi hewan() memiliki nilai yang berbeda dengan variabel nokturnal didalam fungsi hewan(), karena variabel didalam fungsi memiliki lingkupnya sendiri maka saat fungsi hewan() dijalankan nilai yang didapat dari variabel `nokturnal` adalah "Burung Hantu" bukan "Kelelawar", sedangkan variabel yang didefinisikan diluar fungsi dapat digunakan didalam fungsi maka saat fungsi hewan() dijalankan nilai yang didapat dari variabel `diurnal` adalah "Gajah".


Lihat contoh lengkap untuk [Basic Function](functionBasic.js), [Argumen dan Parameter](parameterAndArgument.js), [Returning function](functionReturn.js), dan [Function Scope](functionScope.js).

[<img align="left" src="https://api.bellshade.org/badge/navigation?badgeType=previous&text=Conditioning" />](../007_conditioning)

Expand Down
38 changes: 38 additions & 0 deletions learn/Basic/008_function/functionScope.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// == Contoh == //

// 1. Mendefisikan variabel didalam fungsi
function memancing() {
let ikan = "Lele";
console.log(ikan);
}

// Menampilkan variabel ikan yang didefinisikan didalam fungsi memancing()
// eslint-disable-next-line no-undef, no-use-before-define
console.log(ikan); // Error: ikan tidak terdefinisikan
memancing(); // Lele

// 2. Mendefisikan variabel diluar fungsi
let ikan = "Gurame";

function kolamIkan() {
console.log(ikan);
}

// Menampilkan variabel ikan yang didefinisikan diluar fungsi kolamIkan()
console.log(ikan); // Gurame
kolamIkan(); // Gurame

// 3. Deklarasi variabel didalam dan diluar fungsi
let noktunal = "Kelelawar";
let diurnal = "Gajah";

function hewan() {
let nokturnal = "Burung Hantu";
console.log(nokturnal);
console.log(diurnal);
}

// Menampilkan variabel mamalia yang didefinisikan didalam dan diluar fungsi
console.log(diurnal); // Gajah
console.log(noktunal); // Kelelawar
hewan(); // Burung Hantu & // Gajah
84 changes: 84 additions & 0 deletions learn/Functional/007_Keyword_This/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# _The Keyword This_

Kata kunci `this` digunakan untuk mengakses properti lain di dalam objek parentnya / objek yang sama, untuk pemahaman mengenai kata kunci `this` silahkan dibaca, dipahami, dan dicoba contoh kode dibawah ini.

## Contoh & Penjelasan :

```js
// Membuat objek dan menampilkan data didalamnya
const buah = {
nama: 'Jeruk',
warna: 'Oranye',
rasa: 'Manis',
namaBuah() {
return nama
},
warnaBuah() {
return this.warna
},
fakta() {
return `Buah ${this.nama} berwarna ${this.warna} rasanya ${this.rasa}`
}
}

console.log(buah.namaBuah()) // Error: 'nama' tidak terdefinisikan
```

Objek `nama` tidak terdefinisikan karena merupakan properti didalam objek yang sama bukan sebuah variabel sehingga untuk mengakses properti objek diperlukan kata kunci `this` sebelumnya.

```js
console.log(buah.warnaBuah()) // Oranye
```

Dengan menambahkan kata kunci `this` maka properti objek dapat diakses.

Dan dapat diimplemantasikan pada fungsi didalam objek tersebut.

```js
console.log(buah.fakta()) // Buah Jeruk berwarna Oranye rasanya Manis
```

Membuat objek lain untuk mencoba akses properti pada objek `buah`.

```js
const hewan = {
nama: 'Monyet',
aksi: 'Melompat',
makan() {
return `${this.nama} ${this.aksi} untuk mengambil ${buah.nama} yang berwarna ${buah.warnaBuah()}`
},
cekThis() {
console.log("Nilai dari 'this' adalah", this)
}
}

console.log(hewan.makan()) // Monyet Melompat untuk mengambil Jeruk yang berwarna Oranye
```

Alhasil seluruh properti dalam objek buah juga dapat diakses oleh objek lain.

Kemudian untuk mengetahui isi dari `this` bisa dicoba jalankan fungsi cekThis() yang ada didalam objek `hewan`.

```js
console.log(hewan.cekThis()) // Nilai dari 'this' adalah {hewan Object}
```

Alhasil yang ditampilkan adalah objek `hewan`, oleh karena itu properti didalam objek `hewan` dapat diakses oleh fungsi cekThis() yang ada didalamnya.

Dan terakhir coba membuat variabel yang mereferensikan fungsi didalam objek hewan.

```js
const isiThis = hewan.cekThis

console.log(hewan.cekThis) // cekThis() { console.log("Nilai dari 'this' adalah", this) }

console.log(isiThis()) // Nilai dari 'this' adalah {window Object}
```

Nahh `this` dari variabel `isiThis` adalah objek `window` bukan objek `hewan` karena nilai dari variabel `isiThis` berisikan baris kode fungsi cekThis() yang mana fungsi tersebut dijalankan diluar objek `hewan` dikarenakan kata kunci `this` menginvokasi objek parentnya sehingga `this` di variabel `isiThis` mengakses properti objek `window` yang merupakan default objek berisikan kumpulan fungsi dari javascript.

Oleh karena itu perlu diperhatikan penggunaan kata kunci `this` agar output yang didapatkan sesuai dengan ekspektasi yang diinginkan.

[Contoh Kode 📂](example.js)

[<img align="left" src="https://api.bellshade.org/badge/navigation?badgeType=previous&text=Immutability" />](../006_Immutability)
43 changes: 43 additions & 0 deletions learn/Functional/007_Keyword_This/example.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/* eslint-disable no-undef */
// == Contoh == //

// Membuat objek dan menampilkan data didalamnya
const buah = {
nama: "Jeruk",
warna: "Oranye",
rasa: "Manis",
namaBuah() {
return nama;
},
warnaBuah() {
return this.warna;
},
fakta() {
return `Buah ${this.nama} berwarna ${this.warna} rasanya ${this.rasa}`;
}
};

console.log(buah.namaBuah()); // Error: 'nama' tidak terdefinisikan
console.log(buah.warnaBuah()); // Oranye
console.log(buah.fakta()); // Buah Jeruk berwarna Oranye rasanya Manis

const hewan = {
nama: "Monyet",
aksi: "Melompat",
makan() {
return `${this.nama} ${this.aksi} untuk mengambil ${
buah.nama
} yang berwarna ${buah.warnaBuah()}`;
},
cekThis() {
console.log("Nilai dari 'this' adalah", this);
}
};

console.log(hewan.makan()); // Monyet Melompat untuk mengambil Jeruk yang berwarna Oranye
console.log(hewan.cekThis()); // Nilai dari 'this' adalah {hewan Object}

const isiThis = hewan.cekThis;

console.log(hewan.cekThis); // cekThis() { console.log("Nilai dari 'this' adalah", this) }
console.log(isiThis()); // Nilai dari 'this' adalah {window Object}

0 comments on commit 7885b5a

Please sign in to comment.