Mungkin kita tidak akan pernah tahu seberapa jauh jalan yang bisa kita tempuh, seberapa banyak yang bisa dicapai manusia, sampai kita menyadari bahwa pahala tertinggi bukanlah medali emas, melainkan jalan itu sendiri.
― oleh George Leonard

Halo Dunia; Selamat datang di perjalanan pribadi saya menuju penguasaan JS. Rangkaian postingan blog ini adalah jurnal terbuka perjalanan saya menuju penguasaan dan pemahaman JS tentang topik JS; Saya menulis rangkaian blog ini untuk berbagi apa yang saya ketahui dan juga belajar dari Anda yang membaca ini. Saya menghargai setiap orang yang meluangkan waktunya untuk membaca ini, mengajukan pertanyaan, memberi masukan, meninggalkan komentar, dan membaginya dengan teman. Jika saya melakukan kesalahan, saya di sini untuk belajar, jadi jangan ragu untuk menuliskan satu atau dua baris di bagian komentar.

Sama seperti kutipan dari George Leonard, saya tidak tahu seberapa jauh perjalanan menuju penguasaan JS menjadikan javascript menjadi javascript atau seberapa banyak yang benar-benar dapat saya capai, tetapi imbalan utama dari perjalanan ini adalah mempelajari hal-hal baru, membagikannya, dan meningkatkan keahlian saya.

Perjalanan saya dimulai dengan menjelaskan apa itu Javascript dan apa yang bukan dan kemudian menuju ke topik seperti Call Stacks, Execution Contexts, High Order Functions, Call Backs, Call Back Queues, Event Loop, Async., Javascript Berorientasi Objek, Janji, Iterator, Generator, Pola Desain, Pemrograman Fungsional, dan topik lainnya. Saya yakin saya akan menemukan lebih banyak hal seiring saya menjalani perjalanan ini dan akan memiliki lebih banyak hal untuk dibagikan.

Mari Memulai Perjalanan Kita

Apa itu JavaScript dan Apa yang bukan.

JavaScript adalah bahasa pemrograman yang memerlukan lingkungan untuk dijalankan (run time environment) dan lingkungan tersebut dapat berupa Chrome , IE , Safari , Node.JS atau Adobe Acrobat; yang salah satunya dapat ditulis menggunakan C, C++, C#,Go,… .Tidak seperti kebanyakan bahasa pemrograman, Javascript dengan sendirinya tidak berarti apa-apa tanpa lingkungannya; tidak memiliki konsep masukan atau keluaran; melainkan dirancang untuk berjalan di lingkungan host dan lingkungan tersebut menyediakan mekanisme untuk berkomunikasi dan berinteraksi dengan dunia luar.

Oleh karena itu, ketika mempelajari javascript, penting untuk mengidentifikasi berbagai blok penyusun javascript, ekosistemnya, dan juga mengetahui batasan antara javascript dan lingkungan sekitarnya.

Contoh yang baik untuk mengidentifikasi perbedaan antara JS dan lingkungannya adalah timer yang disediakan oleh lingkungan tetapi bukan javascript; Membedakan hal ini penting, jika pengatur waktu disediakan oleh javascript dengan sifat single-threaded, ini akan menjadi masalah besar karena penghitungan waktu adalah aktivitas pemblokiran. Mempelajari operasi asinkron di JS dan cara melakukannya sangat erat kaitannya dengan pemahaman dan mengidentifikasi batasan javascript dan lingkungan di mana ia dijalankan.

Ekosistem javaScript terdiri dari 3 bagian penting :

Bahasa Javascript :

JavaScript adalah bahasa skrip berorientasi objek lintas platform dengan fungsi kelas satu. Ini adalah Bahasa berbasis prototipe yang dinamis dan mendukung gaya pemrograman berorientasi objek, imperatif, dan fungsional. JavaScript berisi pustaka objek standar, seperti Array, Date, dan Math, dan sekumpulan elemen bahasa inti seperti operator, struktur kontrol, dan pernyataan. Core JavaScript dapat diperluas untuk berbagai tujuan dengan melengkapinya dengan objek tambahan;

"Mesin JavaScript" :

Mesin JavaScript adalah program atau juru bahasa yang mengkompilasi dan mengeksekusi kode javascript, menangani alokasi memori untuk objek, dan menjalankannya. pengumpulan sampah pada benda-benda yang tidak diperlukan lagi. Kami memiliki sejumlah mesin javascript yang berbeda dan aktif:

  • Spider Monkey: Dikembangkan oleh Mozilla dan Ditulis dalam C && C++.
  • Rhino : Dikembangkan oleh Mozilla dan ditulis dalam Java.
  • Chakra: Dikembangkan oleh Microsoft dan digunakan di IE dan Microsoft Edge.
  • Javascript Core (Nitro):dikembangkan oleh Apple dan digunakan di Safari.
  • Google V8:ditulis menggunakan C++ dan digunakan oleh Chrome , NodeJs .

Kebanyakan mesin JS memanfaatkan kompilasi “Just In Time” yang merupakan gabungan antara kompilasi dan interpretasi selama run time. Artinya pada dasarnya adalah kompiler kita mengeksekusi pada saat run time daripada melakukan sesuatu seperti apa yang dilakukan WebPack di mana kita memiliki dokumen sumber dan kita melihat WebPack membuat dokumen lain yang memiliki kode yang ingin dimuntahkan. Meskipun demikian, webPack adalah transpiler dan bukan kompiler karena tidak mengeluarkan bahasa tingkat rendah yang biasanya berupa kode mesin biner.

Lingkungan :

Lingkungan Menyediakan API berbeda untuk Javascript seperti api DOM, api perangkat, api komunikasi, api manajemen data, pengatur waktu, dan banyak lagi. Lingkungan menyediakan JavaScript dengan API yang memungkinkannya menjadi javascript sisi klien dalam kasus browser web dan javascript sisi server dalam kasus Node.JS. Dalam kasus lingkungan sisi klien, mereka memberi kita API untuk mengakses DOM dan terhubung ke internet dan banyak lagi; sedangkan dalam kasus API sisi server mereka memberikan akses ke sistem file,….

Pendekatan berlapis yang diambil oleh ekosistem javascript adalah salah satu alasan yang membuat bahasa javascript kuat. Misalnya mesin javascript V8 digunakan oleh lingkungan sisi klien (Chrome) dan lingkungan sisi server (Node.js). Jika besok ada lingkungan baru dan kita ingin menjalankan kode javascript di dalamnya, kita dapat mengadopsi mesin yang ada atau kita dapat menyambungkan dan memainkan mesin baru yang juga dapat diadopsi oleh lingkungan saat ini.

Benang Tunggal

Bahasa pemrograman adalah kosakata dan seperangkat aturan tata bahasa untuk menginstruksikan komputer atau perangkat komputasi untuk melakukan tugas tertentu sambil tetap mengkomunikasikan kosakata dan tata bahasa tersebut kepada pemrogram dalam bahasa yang dapat dibaca manusia. membentuk. Istilah bahasa pemrograman biasanya mengacu pada bahasa tingkat tinggi, dan JavaScript adalah salah satunya.

Misalnya, salah satu tata bahasa yang disediakan oleh JavaScript adalah fakta bahwa JavaScript peka huruf besar/kecildan menggunakan rangkaian karakter unicode. Tata bahasa lain yang disediakan adalah const yang mendeklarasikan konstanta bernama read-only dengan cakupan blok. Demikian pula, JavaScript telah membuat asumsi awal bahwa kode JavaScript dieksekusi dalam satu thread eksekusi(yaitu baris demi baris langkah demi langkah, satu per satu) atau dijalankan dalam satu thread.

Spesifikasi bahasa JavaScript kami juga membuat asumsi tentang cara kerja mesin kami dan memberikan tata bahasa tambahan dengan kata kunci async yang mengasumsikan mesin JavaScript akan menyediakan implementasi loop peristiwa untuk mengeksekusi kode JS dengan cara non-pemblokiran.

Singkatnya, sifat thread tunggal JavaScript ada pada desain bahasanya dan bukan pada mesin atau lingkungan tempat ia dijalankan. Hanya javascript yang dijalankan oleh V8 atau dijalankan di lingkungan Node.js dijalankan dengan thread tunggal namun mesin atau lingkungan dapat berjalan sesuai spesifikasi bahasa penulisannya.

Ringkasan :

JavaScript hanyalah sebuah skrip, ini adalah bahasa pemrograman; dan memerlukan lingkungan dengan mesin JavaScript untuk menjalankan dan menjalankannya. Semua hal yang dapat kita lakukan dengan JavaScript seperti mengakses internet, membaca file, semuanya diaktifkan oleh lingkungan tempat ia dijalankan dan JavaScript hanyalah bahasa untuk mengakses API tersebut. Jadi ketika orang berbicara tentang JavaScript, biasanya yang dibicarakan adalah bahasa, kemampuan mesin, dan lingkungan yang dijalankan menjadi satu kesatuan.

Terakhir, di dunia JavaScript yang berjalan di mana-mana, saya yakin mengetahui perbedaan tiga lapisan akan membantu kita lebih memahami dunia JavaScript yang berani.