Saya mengerti mengapa var
mengambil nama itu - itu variabel, const
- itu adalah konstan, tetapi apa artinya di belakang nama itu let
, yang lingkupnya ke blok saat ini? Biarlah?
javascript
ecmascript-6
let
Vitaly Zdanevich
sumber
sumber
LET
. Mungkin ada contoh bahasa sebelumnya.LET
dijelaskan pada halaman 7 dari draft pertama manual, tertanggal Mei 1964, pdf di sini .const
adalah referensi objek yang konstan, atau tidak berubah (hanya-baca) di mana objek itu sendiri masih bisa berubah. Misalnya. Setelah deklarasi / penugasanconst foo = ['bar']
,foo.push('bat')
masih akan sah, tetapifoo = ['bar', 'bat']
tidak. Tapi itu terlalu banyak mengetik.Jawaban:
Biarkan adalah pernyataan matematis yang diadopsi oleh bahasa pemrograman awal seperti Skema dan Dasar. Variabel dianggap entitas tingkat rendah yang tidak cocok untuk tingkat abstraksi yang lebih tinggi, sehingga keinginan banyak perancang bahasa untuk memperkenalkan konsep serupa tetapi lebih kuat seperti di Clojure, F #, Scala, di mana
let
mungkin berarti nilai, atau variabel yang dapat ditugaskan, tetapi tidak diubah , yang pada gilirannya memungkinkan kompiler menangkap lebih banyak kesalahan pemrograman dan mengoptimalkan kode lebih baik.JavaScript sudah ada
var
sejak awal, jadi mereka hanya perlu kata kunci lain, dan baru saja meminjam dari puluhan bahasa lain yanglet
sudah menggunakan kata kunci tradisional sedekatvar
mungkin, meskipun dalam JavaScriptlet
malah menciptakan ruang lingkup variabel lokal sebagai gantinya.sumber
len('var') === len('let')
, artinya deklarasi Anda berbaris dengan baik di editor Anda. Saya belum menemukan apa pun untuk menyarankan ini disengaja, tetapi dapat berupa a) menyenangkan secara visual dan lebih mudah dibaca, atau b) sangat menyebalkan untuk men-debug jika Anda mencampur keduanya (yang sepertinya merupakan ide yang buruk, tapi saya ' telah melihatnya selesai).let
telah secara tradisional digunakan untuk menggambarkan suatu konstanta, seperti dalamlet C = the speed of light
Javascript memutuskan untuk menggunakan biarkan untuk menggambarkan variabel dengan pelingkupan tidak standar dan pada saat yang sama memperkenalkan kata kunci lain untuk konstanta.let
dekatvar
. Scala juga tidak digunakanlet
jadi saya tidak melihat bagaimana itu relevan.Saya kira ini mengikuti tradisi matematika. Dalam matematika, sering dikatakan "biarkan x menjadi bilangan real arbitrer" atau seperti itu.
sumber
Menambah respons exebook , penggunaan matematika dari kata kunci memungkinkan juga merangkum implikasi pelingkupan
let
ketika digunakan dalam Javascript / ES6. Secara khusus, sama seperti kode ES6 berikut ini tidak mengetahui penugasan dalam kurung kurawaltoPrint
ketika mencetak nilai'Hello World'
,membiarkan seperti yang digunakan dalam matematika formal (terutama penulisan bukti) menunjukkan bahwa turunan variabel saat ini hanya ada untuk lingkup gagasan logis itu. Dalam contoh berikut, x segera memperoleh identitas baru setelah memasukkan ide baru (biasanya ini adalah konsep yang diperlukan untuk membuktikan ide utama) dan segera kembali ke yang lama pada kesimpulan sub-bukti. Tentu saja, seperti dalam pengkodean, ini dianggap agak membingungkan dan biasanya dihindari dengan memilih nama yang berbeda untuk variabel lain.
Biarkan x begitu dan begitu ...
Barang bukti
Ide Baru {Biarkan x menjadi sesuatu yang lain ... buktikan sesuatu} Akhiri Ide Baru
Buktikan ide utama dengan x lama
sumber
let
tentang apa.let
adalah semua tentang ruang lingkup.let
membuat saya memikirkan hal seperti ini terjadi dalam pikiran penulis kode, "Ok, untuk saat ini sajalet foo = bar
, tetapi kemudian dapat kembali ke nilai aslinya atau berhenti. Ini diilustrasikan dengan rapi dalam contoh untuk Block Scope dan Redeclaring Variables dalam presentasi W3Schools ini darilet
. Sekali lagi, tidak berpura-pura membawa semacam jawaban ilmiah, tetapi membagikan ini lebih sebagai perangkat mnemonik untuk diingat ketika saya ingin menggunakanlet
.toPrint
yang hanya ada di dalam blok , dan kemudian dengan patuh membuang variabel itu ketika blok berakhir. Dan saat keluar, kita kembali ke ruang lingkup luar, di mana bagian dalamtoPrint
tidak ada lagi, jadiconsole.log(toPrint)
mengacu pada bagian luartoPrint
. Bukannya sesuatu diabaikan, hanya sajalet
variabel memiliki masa hidup terbatas yang ditentukan oleh cakupannya.Itu tidak persis apa yang
var
dilakukannya dengan perbedaan ruang lingkup. Sekarang tidak dapat mengambil namavar
karena sudah diambil.Jadi sepertinya telah mengambil nama terbaik berikutnya yang memiliki semantik dalam konstruksi bahasa Inggris yang menarik.
Dalam bahasa Inggris tertulis "Biarkan hewan peliharaan saya menjadi anjing"
sumber
A$="HELLO WORLD"
) Penerjemah yang terlibat termasuk Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 pada CP / M, Applesoft BASIC, dan bahkan BASCOM, kompiler MS BASIC pada CP / M. VAX BASIC memang memiliki LET, tetapi tidak memerlukannya, seingat saya. Memori sangat ketat saat itu, dan 3 atau 4 karakter tambahan dari teks program per pernyataan membuat perbedaan, terutama dalam program "besar".Kemungkinan yang paling mungkin adalah bahwa itu adalah pilihan yang paling idiomatis. Tidak hanya mudah untuk berbicara, tetapi juga lebih intuitif untuk dipahami. Beberapa bisa berdebat, bahkan lebih dari itu
var
.Tapi saya rasa ada sedikit lebih banyak sejarah untuk ini.
Dari Wikipedia :
Saya ingin percaya ini adalah inspirasi juga, untuk
let
di Javascript.sumber
LET
di BASIC, dari tahun 1964.let
ke JavaScript. Tidak sepenuhnya tidak benar, sejauh kelanjutannya, tetapi tanpa signifikansi nyata. (Dan sama sekali tidak mengesampingkan kemungkinan bahwa penggunaan "biarkan" Scott juga diinspirasi oleh BASICLET
.)Biarkan menggunakan lingkup terbatas tingkat blok yang lebih langsung sedangkan var adalah lingkup fungsi atau lingkup global biasanya.
Tampaknya membiarkan dipilih karena kemungkinan besar ditemukan dalam begitu banyak bahasa lain untuk mendefinisikan variabel, seperti BASIC, dan banyak lainnya.
sumber
Saya pikir hutang JavaScript untuk Skema sudah jelas di sini. Skema tidak hanya memiliki let, tetapi memiliki let *, let * -values, let-syntax, dan let-values. (Lihat, Bahasa Pemrograman Skema, Edisi ke-4).
((Pilihan ini menambah kepercayaan lebih lanjut pada gagasan bahwa JavaScript adalah Lispy, tetapi - sebelum kita terbawa - bukan homoikonik.)))))
sumber
Bisa juga berarti sesuatu seperti "leksikal Lingkungan Jenis atau Terikat" .. itu mengganggu saya bahwa itu hanya akan "biarkan ini menjadi yang ". Dan biarkan rec tidak masuk akal dalam kalkulus lambda.
sumber