Tantangan Lingkup dan Fungsi Global memiliki masalah.
Agen Pengguna adalah: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
.
Jelaskan cara mereproduksi masalah ini, dan sertakan tautan ke tangkapan layar jika memungkinkan.
kode saya:
// Declare your variable here
var myGlobal = 10;
function fun1() {
// Assign 5 to oopsGlobal Here
}
// Only change code above this line
function fun2() {
var output = "";
if (typeof myGlobal != "undefined") {
output += "myGlobal: " + myGlobal;
}
if (typeof oopsGlobal != "undefined") {
output += " oopsGlobal: " + oopsGlobal;
}
console.log(output);
}
Kita harus mulai menggunakan es6 let
dan const
. Deklarasi variabel var
berpotensi menimbulkan bug.
Fitur ES6 termasuk let
dan const
akan dibahas secara rinci dalam topik kurikulum baru yang sedang dikembangkan (lihat di sini ). Tantangan ini juga akan mengatasi masalah yang dapat disebabkan oleh pelingkupan/pengangkatan saat menggunakan var
.
Untuk saat ini tantangan ini berfungsi sebagai pengantar untuk pelingkupan dan beberapa masalah yang harus diwaspadai ketika var
digunakan, dan masih berisi informasi yang berguna karena pekemah kemungkinan akan menemukan kode dari sumber (lama) lain yang melakukannya gunakan var
(misalnya kode lama, dll), sehingga ini merupakan pengantar yang berguna untuk masalah yang dibahas.
Mungkin ada argumen untuk menghapus garis
Anda harus selalu mendeklarasikan variabel Anda dengan var.
atau mengubahnya dengan beberapa peringatan tentang belajar tentang let
dan const
nanti, tapi saya pikir tantangan ini baik untuk pengenalan pertama topik.
cc @FreeCodeCamp/issue-moderators Pikiran?
@BKinahan Bagus sekali.
Kapan menggunakan dan tidak menggunakan var
tidak selalu tergantung pada masing-masing pengembang tetapi sebagian besar waktu tergantung pada tim.
Meskipun saya belum menemukan waktu di mana var
tidak dapat diganti dengan let
atau const
saya telah berbicara dengan seorang insinyur di OpenTable, yang baru-baru ini memfaktorkan ulang seluruh basis kode mereka untuk digunakan ES2015, dan dia menyebutkan ada satu kasus di mana let
atau const
adalah penyebab bug dan var
harus digunakan tetapi dia tidak dapat mengingat detail persisnya mengapa itu.
Saya tidak berpikir var
harus berkecil hati. Lebih baik jelaskan cara kerja var
dan biarkan pengembang memilih begitu mereka semakin jauh dalam perjalanan menuju pencerahan.
Ada juga beberapa keanehan dengan let
dan const
yang jika Anda tidak menyadarinya dapat melalui Anda melalui beberapa loop (lihat: temporal dead zone ). Ini tidak mendiskualifikasi let
dan const
untuk digunakan, meskipun ini mengganggu. Itu hanya berarti bahwa grokking sesuatu sama pentingnya dengan mengetahui sesuatu.
Terima kasih atas masukannya. Mereka berdua poin yang bagus. Saya kira ini semua berdasarkan opini. Namun, saya akan mempertahankan pernyataan saya, dan saya akan pergi sejauh berkhotbah untuk menggunakan data yang tidak dapat diubah, dan menggunakan perpustakaan seperti immutable.js atau mori untuk mencegah mutasi data yang tidak terduga. ️
Komentar yang paling membantu
@BKinahan Bagus sekali.
Kapan menggunakan dan tidak menggunakan
var
tidak selalu tergantung pada masing-masing pengembang tetapi sebagian besar waktu tergantung pada tim.Meskipun saya belum menemukan waktu di mana
var
tidak dapat diganti denganlet
atauconst
saya telah berbicara dengan seorang insinyur di OpenTable, yang baru-baru ini memfaktorkan ulang seluruh basis kode mereka untuk digunakan ES2015, dan dia menyebutkan ada satu kasus di manalet
atauconst
adalah penyebab bug danvar
harus digunakan tetapi dia tidak dapat mengingat detail persisnya mengapa itu.Saya tidak berpikir
var
harus berkecil hati. Lebih baik jelaskan cara kerjavar
dan biarkan pengembang memilih begitu mereka semakin jauh dalam perjalanan menuju pencerahan.Ada juga beberapa keanehan dengan
let
danconst
yang jika Anda tidak menyadarinya dapat melalui Anda melalui beberapa loop (lihat: temporal dead zone ). Ini tidak mendiskualifikasilet
danconst
untuk digunakan, meskipun ini mengganggu. Itu hanya berarti bahwa grokking sesuatu sama pentingnya dengan mengetahui sesuatu.