Universitas Kebudayaan Digital Makassar

Universitas Kebudayaan Digital Makassar (UKDMKS) memadukan inovasi teknologi digital dengan pelestarian budaya lokal. Bergabunglah untuk membangun masa depan berbasis budaya dan teknologi!

javascript

Apa itu Variable Declaration di Javascript Terbaru?

Awalnya memahami deklarasi variabel di JavaScript agak sedikit rumit. Karena pada JavaScript berbeda dari bahasa pemrograman berbasis bahasa C yang umumnya variabel tersedia pada blok ketika ia dibuat. Namun pada JavaScript kasus tersebut tidak selalu benar. 
Variabel pada JavaScript akan dibuat tergantung bagaimana cara kita mendeklarasikannya. Sedikit membingungkan bukan? Jangan khawatir, kita akan  bahas masalah ini lebih detail.

Deklarasi var dan Hoisting

Variabel yang dideklarasikan menggunakan var akan selalu diangkat pada tingkatan atas sebuah fungsi walaupun kita menuliskannya bukan pada tingkatan atas fungsi. Proses pengangkatan deklarasi variabel ini disebut dengan hoisting
Perhatikan contoh kode berikut:


  1. function makeTea(isCold) {

  2.    if(isCold) {

  3.        var tea = "Make an Ice Tea!"

  4.    } else {

  5.        var tea = "Make a Hot Tea!"

  6.    }

  7.    return tea;

  8. }

  9.  

  10. console.log(makeTea(false));

  11.  

  12. /* output

  13. Make a Hot Tea!

  14. */


Kode di atas akan menghasilkan output “Make a Hot Tea!”. Mengapa bisa demikian? Padahal kita mendeklarasikan variabel tea di dalam blok if dan blok else. Seharusnya kita tidak dapat mengaksesnya diluar blok tersebut dan menghasilkan error:


  1. ReferenceError: tea is not defined


Nah, inilah yang akan kita dapatkan jika menggunakan keyword var dalam mendeklarasikan variabel. Di belakang layar, JavaScript mengangkat proses deklarasi variabel tea pada tingkatan atas fungsi. Sehingga variabel tersebut akan tersedia selama kita berada di dalam fungsi makeTea. Dengan begitu kode sebenarnya akan menjadi seperti ini:


  1. function makeTea(isCold) {

  2.     var tea;

  3.     if(isCold) {

  4.        tea = "Make an Ice Tea!"

  5.     } else {

  6.        tea = "Make a Hot Tea!"

  7.     }

  8.     return tea;

  9. }

  10.  

  11. console.log(makeTea(false));

  12.  

  13. /* output

  14. Make a Hot Tea!

  15. */


Bahkan karena proses hoisting inilah kita bisa menginisialisasi nilai dan menggunakan variabel sebelum ia dideklarasikan. Hal ini sedikit tidak masuk akal bukan?


  1. function getFood() {

  2.     food = "choocolate";

  3.     console.log(food);

  4.     var food;

  5. }

  6.  

  7. getFood();

  8.  

  9. /* output

  10. choocolate

  11. */


Proses hoisting menjadi kontroversial karena tidak jarang developer yang dibuat bingung akan hal ini.

let dan const

Sejak ES6 selain var, menginisialisasikan variabel dapat menggunakan let dan const. ES6 melakukan improvisasi pada deklarasi variabel karena menggunakan var terdapat beberapa hal yang kontroversial, salah satunya hoisting yang sudah kita bahas tadi.
Variabel yang dideklarasikan dengan let atau const akan menghilangkan permasalahan dari hoisting karena variabel akan tersedia pada cakupan block (sama seperti bahasa pemrograman berbasis C), bukan pada fungsi. 
Perhatikan kode berikut. Mari gunakan contoh kode sebelumnya namun menggunakan let dalam mendeklarasikan variabel:


  1. function makeTea(isCold) {

  2.    if(isCold) {

  3.        let tea = "Make an Ice Tea!"

  4.    } else {

  5.        let tea = "Make a Hot Tea!"

  6.    }

  7.    return tea;

  8. }

  9.  

  10. console.log(makeTea(false));

  11.  

  12. /* output

  13. ReferenceError: tea is not defined

  14. */


Variabel yang dideklarasikan menggunakan let ataupun const juga tidak dapat diakses sebelum ia dideklarasikan, karena variabel akan terhenti pada tempat yang biasa disebut dengan temporal dead zone hingga akhirnya variabel tersebut dideklarasi. Jika kita mencoba melakukannya maka akan menghasilkan eror yang sama.


  1. function getFood() {

  2.     food = "choocolate";

  3.     console.log(food);

  4.     let food;

  5. }

  6.  

  7. getFood();

  8.  

  9. /* error:

  10. ReferenceError: food is not defined

  11. */


let dan const menjadi solusi dari permasalahan hoisting pada JavaScript. Hal ini menjadikan JavaScript lebih ketat dalam pendeklarasian variabel, sehingga dapat meminimalisir peluang terjadinya bug.

Aturan penggunaan let dan const

Setelah kita mengetahui mengapa kita harus menggunakan let dan const daripada var dalam mendeklarasikan variabel, lantas apa perbedaan dari let dan const itu sendiri? Kapan kita harus menggunakan let daripada const? Begitu pula sebaliknya.
Variabel yang dideklarasikan dengan let atau pun const memiliki kesamaan dan perbedaan karakteristik. Persamaannya adalah variabel yang dideklarasikan dengan let atau const tidak dapat di deklarasikan ulang pada cakupan yang sama (kita dapat melakukan hal ini ketika menggunakan var).


  1. let name = "John";

  2. let name = "Doe";

  3.  

  4. console.log(name);

  5.  

  6. /* error:

  7. SyntaxError: Identifier 'name' has already been declared

  8. */


Perbedaanya antara let dan const adalah jika kita menggunakan let maka variabel tersebut dapat diinisialisasi ulang nilainya. Sedangkan const tidak bisa, sehingga jika kita menggunakan const pastikan kita langsung menginisialisasi nilai dari variabel tersebut.


  1. let name = "John";

  2. name = "Doe";

  3.  

  4.  

  5. console.log(name);

  6.  

  7.  

  8. /* output:

  9. Doe

  10. */


Jadi intinya kapan kita harus menggunakan let dan const? Untuk aturan umum penggunaanya adalah sebagai berikut:
  • Gunakan let ketika variabel yang kita buat akan diinisialisasikan kembali nilainya. 
  • Gunakan const ketika variabel yang kita buat tidak ingin diinisialisasikan kembali nilainya.
const merupakan cara yang paling ketat dalam membuat variabel, sehingga pastikan kita menggunakan const jika memang kita tidak berencana untuk menginisialisasikan kembali nilainya.
Ada sedikit catatan, bahwa mengubah dan menginisialisasikan ulang nilai pada variabel merupakan hal yang berbeda. Kita bisa lihat perbedaanya dengan jelas ketika sebuah variabel tersebut merupakan array atau objek.
Menginisialisasikan ulang


  1. const fruits = ["apple", "orange"];

  2. fruits = ["apple", "orange", "banana"];

  3.  

  4.  

  5. console.log(fruits);

  6.  

  7.  

  8. /* output

  9. TypeError: Assignment to constant variable. */



  1. const people = { name: "John", age: 18 };

  2. people = { name: "John", age: 18, regency: "Bandung" };

  3.  

  4.  

  5. console.log(people);

  6.  

  7.  

  8. /* TypeError: Assignment to constant variable. */


Mengubah


  1. const fruits = ["apple", "orange"];

  2. fruits.push("banana");

  3.  

  4.  

  5. console.log(fruits);

  6.  

  7.  

  8. /* output

  9. [ 'apple', 'orange', 'banana' ] 

  10. */



  1. const people = { name: "John", age: 18 }

  2.  

  3.  

  4. people.regency = "Bandung"

  5.  

  6.  

  7. console.log(people);

  8.  

  9.  

  10. /* output

  11.   { name: 'John', age: 18, regency: 'Bandung' }

  12. */


Membuat variabel dengan const akan membuat variabel tersebut bersifat read-only, tapi bukan berarti tidak dapat diubah nilainya. Mungkin variabel yang menampung nilai primitif seperti stringnumberboolean akan sulit mengubah nilainya tanpa melalui inisialisasi ulang

Solution : Variable Declaration

Apakah Anda sudah menerapkan seluruh deklarasi menggunakan standar ES6? Jika belum, mari kita lakukan hal tersebut bersama-sama.
Jika kita lihat pada seluruh kode yang ada, seluruh deklarasi variabel masih menggunakan var. Baik itu pada berkas main.jsclubs.js, ataupun data-source.js.
Mari kita ubah seluruh deklarasinya menggunakan const. Mengapa const? Karena jika kita telaah seluruh kode yang ada, tidak ada satu baris kode pun berupa statement untuk menginisialisasikan ulang nilai pada variabel. Jadi tidak ada alasan kita gunakan let pada project ini.
Setelah menerapkan const ketika deklarasi variabel, maka kode main.jsclubs.js, dan data-source.js akan tampak seperti ini:


  1. const main = function () {

  2.    const searchElement = document.querySelector("#searchElement");

  3.    const buttonSearchElement = document.querySelector("#searchButtonElement");

  4.    const clubListElement = document.querySelector("#clubList");

  5.  

  6.  

  7.    const onButtonSearchClicked = function () {

  8.        const dataSource = new DataSource(renderResult, fallbackResult);

  9.        dataSource.searchClub(searchElement.value);

  10.    };

  11.  

  12.  

  13.    const renderResult = function (results) {

  14.        clubListElement.innerHTML = "";

  15.        results.forEach(function (club) {

  16.            const name = club.name;

  17.            const fanArt = club.fanArt;

  18.            const description = club.description;

  19.  

  20.  

  21.            const clubElement = document.createElement("div");

  22.            clubElement.setAttribute("class", "club");

  23.  

  24.  

  25.            clubElement.innerHTML = '<img class="fan-art-club" src="' + fanArt + '" alt="Fan Art">n' +

  26.                '<div class="club-info">n' +

  27.                '<h2>' + name + '</h2>n' +

  28.                '<p>' + description + '</p>' +

  29.                '</div>';

  30.            clubListElement.appendChild(clubElement);

  31.        })

  32.    };

  33.  

  34.  

  35.    const fallbackResult = function (message) {

  36.        clubListElement.innerHTML = "";

  37.        clubListElement.innerHTML += '<h2 class="placeholder">' + message + '</h2>'

  38.    };

  39.  

  40.  

  41.    buttonSearchElement.addEventListener("click", onButtonSearchClicked);

  42. };



  1. function DataSource(onSuccess, onFailed) {

  2.    this.onSuccess = onSuccess;

  3.    this.onFailed = onFailed;

  4. }

  5.  

  6.  

  7. DataSource.prototype.searchClub = function (keyword) {

  8.    const filteredClubs = clubs.filter(function (club) {

  9.        return club.name.toUpperCase().includes(keyword.toUpperCase());

  10.    });

  11.  

  12.  

  13.    if (filteredClubs.length) {

  14.        this.onSuccess(filteredClubs);

  15.    } else {

  16.        this.onFailed(keyword + " is not found");

  17.    }

  18. };



  1. const clubs = [

  2.    {

  3.        name: "Arsenal",

  4.        stadium: "Emirates Stadium",

  5.        fanArt: "....",

  6.        description: "...."

  7.    },

  8.    {

  9.        name: "Aston Villa",

  10.        stadium: "Villa Park",

  11.        fanArt: "....",

  12.        description: "...."

  13.    },

  14.    {

  15.        name: "Bournemouth",

  16.        stadium: "Dean Court",

  17.        fanArt: "....",

  18.        description: "....",

  19.    },

  20.    {

  21.        name: "Brighton",

  22.        stadium: "Falmer Stadium",

  23.        fanArt: "....",

  24.        description: "....",

  25.    }

  26. ];


Bagaimana guna memastikan perubahan yang kita lakukan sudah benar? Silakan Anda coba buka berkas index.html pada browser. Jika aplikasi berjalan dengan lancar, maka perubahan yang Anda lakukan berhasil diterapkan dengan baik.
Namun bagaimana jika aplikasi tidak berjalan lancar dan menghasilkan eror pada console browser?  Jangan malu untuk bertanya pada forum diskusi ya!

Langkah dari solution ini bisa Anda temukan juga pada repository berikut: https://github.com/dicodingacademy/a163-bfwd-labs/tree/102-club-finder-variable-declaration-solution
Asalas | Unlock Anime, Manhwa & Donghua Like Never BeforeFinasteriden: Unlock the Secrets of the Movie World!Marians Woman: Celebrating Beauty Around the WorldArheon - Unveiling the Secrets of Food & Origins WorldwideMPAPER The Ultimate Destination for Anime & Manga FansANMC21: Your Guide to Smarter Living and SuccessMV Agusta of Tampa: Your Automotive News HubTech and Play: Your Hub for Technology, Gaming, and GadgetsRebeccaSommer : Stories & Cultures from Around the WorldUETRABAJANDOJUNTOS - Inside the Music World’s Best-Kept SecretsVandelay Armor - Viral News and Global UpdatesGainesville Sun: Technology & Computers UnveiledGRFX Gaming Party Bus: Journey Through Gaming ErasHouse of Beauty: Celebrating the World's Most Beautiful WomenLearn Mistake: Wisdom for a Better LifeSports Hope Alive: Portal Olahraga DuniaWorld News TW - The Hottest Viral News & Global HeadlinesWriter Sujatha - Life Lessons & Struggles That Inspirehttps://128.199.185.186/https://143.198.89.74/https://165.227.47.178/https://170.64.208.214/https://170.64.192.239/https://46.101.102.216/LVONLINEtelegram lvonlinehttps://www.thecarbongenie.com/https://www.aievea-bijou.com/https://www.slashpolicy.com/https://www.benwestbeech.com/https://www.hh-bags.com/https://www.drupalforfacebook.org/https://www.lvonline.boats/https://www.lvoslot.com/https://www.lvobet.id/https://www.lvoslot.id/https://www.lvonline000.com/https://www.lvonline001.com/https://www.lvonline002.com/https://www.lvonline003.com/https://www.lvonline004.com/https://www.lvonline005.com/https://www.lvonline006.com/https://www.lvonline007.com/https://www.lvonline008.com/https://www.lvonline009.com/https://www.lvonline010.com/https://www.lvonlinepoker.com/https://www.lvonlinebola.com/https://www.lvonlinekasino.com/https://www.lvonline.io/https://www.lvonline.store/https://www.lvonline.online/https://www.situslvonline.us/situs bandar lvonlinehttps://146.190.97.83/https://143.198.209.134/https://188.166.246.204/https://167.172.83.179/https://togelhok.tv/https://www.togelhok.id/https://earthtoweb.com/https://www.elearningfacultymodules.org/https://www.how6youtoknowc.org/https://128.199.71.129/https://167.172.64.185/https://152.42.192.250/https://www.capcut88.com/https://www.capcut88.co/https://towsonsmiles.com/https://www.campur88.com/https://www.campur88.org/https://www.campur88.work/https://www.campur88.xyz/https://www.campur88.lol/https://www.nagacampur.biz/https://www.nagacampur.club/https://www.nagacampur.co/https://www.nagacampur.me/https://www.nagacampur.xyz/https://www.nasicampur88.com/https://165.232.175.185/https://152.42.164.228/https://152.42.194.203/https://152.42.169.214/https://www.campurslot.com/https://www.campurslot.id/https://www.campurslot.co/https://www.campurslot.org/https://www.campurslot.homes/https://www.campurslot.design/Badan Lembaga Pendidikan Ilmu Komputer SubangUniversitas Negeri JeparaLembaga Universitas Kristen MaranthaSMP 3 Negri Nganjukhttps://iklanmalay.com/https://promobola.comhttps://kapsychologists.comhttps://propertycloudsite.comSattar777 NewsVR Slot Online NewsRuby888 Online Slot NewsBerita Global Klik Agenslot228Agen Sloto SG777 NewsGold Club SlotOnline NewsAzar Marra Kech NewsBerita Sidney dan MancanegaraBerita Seputar Sumsel dan DuniaBerita Rehabilitasi Judi OnlineBerita Link Gacor TerupdateItalian Tuition News UpdateWPJS Online NewsBerita Agen Slot RoyalThai Slot Online NewsAll Online Game NewsOnline Game News UpdateAsian Lotre NewsBerita Demo Dana SlotBerita Kalbar ProvLocanda della Maria NewsWye Valley NewsBerita Agen Slot1004Berita Agen Slot33Agen Slot399 NewsPlayboy Slot Online NewsSlot Online BB Slot NewsSlot Online 911 News365 Slot Online NewsEat Atlah Newsambamali canadaInfo Seputar Sepakbolacentre thoughtBerita Hiburanopen etherpadras indo groupresistance manualPrediksi Shiowe want real newsthe poisoned pawnindonesia reclaimed teakswift kennedy and copullip passionmy passion foraim torontoPublic FlashesFriweb TeknologiIngenious Gamersthe late show gardensGishPuppy Newsslot danaOregon Farm Garden NewsViral Pulse GlobaljumpajpPromo Bola soccer Captivates The WorldKapsychologists World First The Science of Mental Health - Understanding Psychiatry: The Science of Mental HealthPropertyCloudSite How to Make Smarter Investments in Today’s MarketArnavichara Ultimate Guide Right Business SoftwareAuscare Disability A Comprehensive Guide to Retirement Homes Finding the Perfect Place to Enjoy Your Golden YearsSeries Mp4 The Future of Entertainment Streaming and Downloadable Video ExplainedAlogirlxinh How to Create a Successful Personal Page or Blog in 2024ihokibethttps://bengbulang-karangpucung.cilacapkab.go.id/https://comunicacion.unsa.edu.ar/https://seychellesbiodiversitychm.sc/https://www.925lms.com/https://www.guisseny.memoire.bzh/https://www.mobiliars.org/https://www.squashparkwieliczka.pl/
Asalas | Unlock Anime, Manhwa & Donghua Like Never BeforeFinasteriden: Unlock the Secrets of the Movie World!Marians Woman: Celebrating Beauty Around the WorldArheon - Unveiling the Secrets of Food & Origins WorldwideMPAPER The Ultimate Destination for Anime & Manga FansANMC21: Your Guide to Smarter Living and SuccessMV Agusta of Tampa: Your Automotive News HubTech and Play: Your Hub for Technology, Gaming, and GadgetsRebeccaSommer : Stories & Cultures from Around the WorldUETRABAJANDOJUNTOS - Inside the Music World’s Best-Kept SecretsVandelay Armor - Viral News and Global UpdatesGainesville Sun: Technology & Computers UnveiledGRFX Gaming Party Bus: Journey Through Gaming ErasHouse of Beauty: Celebrating the World's Most Beautiful WomenLearn Mistake: Wisdom for a Better LifeSports Hope Alive: Portal Olahraga DuniaWorld News TW - The Hottest Viral News & Global HeadlinesWriter Sujatha - Life Lessons & Struggles That Inspirehttps://128.199.185.186/https://143.198.89.74/https://165.227.47.178/https://170.64.208.214/https://170.64.192.239/https://46.101.102.216/LVONLINEtelegram lvonlinehttps://www.thecarbongenie.com/https://www.aievea-bijou.com/https://www.slashpolicy.com/https://www.benwestbeech.com/https://www.hh-bags.com/https://www.lvonline.boats/https://www.lvoslot.com/https://www.lvobet.id/https://www.lvoslot.id/https://www.lvonline000.com/https://www.lvonline001.com/https://www.lvonline002.com/https://www.lvonline003.com/https://www.lvonline004.com/https://www.lvonline005.com/https://www.lvonline006.com/https://www.lvonline007.com/https://www.lvonline008.com/https://www.lvonline009.com/https://www.lvonline010.com/https://www.lvonlinepoker.com/https://www.lvonlinebola.com/https://www.lvonlinekasino.com/https://www.lvonline.io/https://www.lvonline.store/https://www.lvonline.online/https://www.situslvonline.us/situs bandar lvonlinehttps://146.190.97.83/https://143.198.209.134/https://188.166.246.204/https://167.172.83.179/https://togelhok.tv/https://www.togelhok.id/https://earthtoweb.com/https://www.elearningfacultymodules.org/https://www.how6youtoknowc.org/https://128.199.71.129/https://167.172.64.185/https://152.42.192.250/https://www.capcut88.com/https://www.capcut88.co/https://towsonsmiles.com/https://www.campur88.com/https://www.campur88.org/https://www.campur88.work/https://www.campur88.xyz/https://www.campur88.lol/https://www.nagacampur.biz/https://www.nagacampur.club/https://www.nagacampur.co/https://www.nagacampur.me/https://www.nagacampur.xyz/https://www.nasicampur88.com/https://165.232.175.185/https://152.42.164.228/https://152.42.194.203/https://152.42.169.214/https://www.campurslot.com/https://www.campurslot.id/https://www.campurslot.co/https://www.campurslot.org/https://www.campurslot.homes/https://www.campurslot.design/Badan Lembaga Pendidikan Ilmu Komputer SubangUniversitas Negeri JeparaLembaga Universitas Kristen MaranthaSMP 3 Negri Nganjukhttps://iklanmalay.com/https://promobola.comhttps://kapsychologists.comhttps://propertycloudsite.comSattar777 NewsVR Slot Online NewsRuby888 Online Slot NewsBerita Global Klik Agenslot228Agen Sloto SG777 NewsGold Club SlotOnline NewsAzar Marra Kech NewsBerita Sidney dan MancanegaraBerita Seputar Sumsel dan DuniaBerita Rehabilitasi Judi OnlineBerita Link Gacor TerupdateItalian Tuition News UpdateWPJS Online NewsBerita Agen Slot RoyalThai Slot Online NewsAll Online Game NewsOnline Game News UpdateAsian Lotre NewsBerita Demo Dana SlotBerita Kalbar ProvLocanda della Maria NewsWye Valley NewsBerita Agen Slot1004Berita Agen Slot33Agen Slot399 NewsPlayboy Slot Online NewsSlot Online BB Slot NewsSlot Online 911 News365 Slot Online NewsEat Atlah Newsambamali canadaInfo Seputar Sepakbolacentre thoughtBerita Hiburanopen etherpadras indo groupresistance manualPrediksi Shiowe want real newsthe poisoned pawnindonesia reclaimed teakswift kennedy and copullip passionmy passion foraim torontoPublic FlashesFriweb TeknologiIngenious Gamersthe late show gardensGishPuppy Newsslot danaOregon Farm Garden NewsViral Pulse GlobaljumpajpPromo Bola soccer Captivates The WorldKapsychologists World First The Science of Mental Health - Understanding Psychiatry: The Science of Mental HealthPropertyCloudSite How to Make Smarter Investments in Today’s MarketArnavichara Ultimate Guide Right Business SoftwareAuscare Disability A Comprehensive Guide to Retirement Homes Finding the Perfect Place to Enjoy Your Golden YearsSeries Mp4 The Future of Entertainment Streaming and Downloadable Video ExplainedAlogirlxinh How to Create a Successful Personal Page or Blog in 2024ihokibethttps://bengbulang-karangpucung.cilacapkab.go.id/https://comunicacion.unsa.edu.ar/https://seychellesbiodiversitychm.sc/https://www.925lms.com/https://www.guisseny.memoire.bzh/https://www.mobiliars.org/https://www.squashparkwieliczka.pl/https://mok.edu.kz/https://www.mware.cloud/https://www.facilitiescoolingandheating.com.au/https://www.krillpay.ng/https://925worksuite.com/https://www.scenarioaulongcourt-archives.com/http://www.lesateliersdusoleil.fr/