Cara menulis kod JS berkualiti tinggi_Pengetahuan asas
Saya mahu menulis pustaka JavaScript yang cekap tetapi tidak tahu bagaimana untuk memulakan
Saya cuba membaca perpustakaan kelas orang lain, tetapi saya tidak faham sama sekali
Saya bercadang untuk mengkaji fungsi lanjutan js, tetapi kandungan dalam buku berwibawa terlalu berselerak,
Walaupun saya masih ingat "penggunaan", saya tidak memikirkan "kaedah" apabila "menggunakan"nya.
Mungkin anda seperti saya, nampaknya ada satu kuasa ghaib yang menghalang rancangan kita, membuatkan kita berulang kali memikirkan keterbatasan ilmu, menyebabkan kita terdiam dan sukar untuk maju ke hadapan.
Dalam tempoh ini, tekanan meningkat dua kali ganda disebabkan oleh pelbagai tugasan, reka bentuk kursus dan laporan percubaan. Jarang untuk memerah sedikit masa, tidak pernah tidur, menyusun dan meringkaskan buku yang saya baca pada masa lalu, hanya untuk lebih dekat dengan menulis perpustakaan kelas saya sendiri.
Artikel ini merujuk kepada "Javascript Language Essence" dan "Effective JavaScript". Contoh telah dinyahpepijat, dan selepas memahaminya, saya ingin membuat beberapa prinsip "mendalam" sedikit lebih mudah.
1. Skop pembolehubah
Skop adalah seperti oksigen kepada pengaturcara. Ia ada di mana-mana, dan anda sering tidak memikirkannya. Tetapi apabila ia tercemar (cth. menggunakan objek global), anda boleh berasa sesak nafas (cth. aplikasi menjadi kurang responsif). Peraturan skop teras JavaScript adalah mudah, direka bentuk dengan baik dan berkuasa. Menggunakan JavaScript dengan berkesan memerlukan penguasaan beberapa konsep asas skop pembolehubah dan memahami beberapa kes kelebihan yang boleh membawa kepada masalah sukar difahami dan buruk.
1.1 Gunakan pembolehubah global sesedikit mungkin
Javascript memudahkan untuk mencipta pembolehubah dalam ruang nama global. Mencipta pembolehubah global adalah mudah kerana ia tidak memerlukan sebarang bentuk pengisytiharan dan diakses secara automatik oleh semua kod sepanjang program.
Bagi pemula seperti kami, apabila kami menghadapi keperluan tertentu (contohnya, data yang dihantar direkodkan, digunakan semasa menunggu fungsi tertentu dipanggil pada masa tertentu; atau fungsi tertentu sering digunakan), kami tidak teragak-agak untuk memikirkan fungsi global, atau bahkan Bahasa C yang saya pelajari pada tahun pertama saya terlalu berakar umbi dalam pemikiran berorientasikan proses, dan sistem ini penuh dengan fungsi. Mentakrifkan pembolehubah global mencemarkan ruang nama awam yang dikongsi dan boleh membawa kepada konflik penamaan yang tidak dijangka. Pembolehubah global juga memudaratkan modulariti kerana ia membawa kepada gandingan yang tidak perlu antara komponen bebas dalam program. Secara serius, terlalu banyak global (termasuk helaian gaya, mentakrifkan secara langsung gaya div atau a) akan menjadi ralat bencana apabila disepadukan ke dalam proses pembangunan berbilang orang. Itulah sebabnya semua kod jQuery dibalut dengan ungkapan tanpa nama yang dilaksanakan serta-merta - fungsi tanpa nama panggilan sendiri. Apabila penyemak imbas memuatkan fail jQuery, fungsi tanpa nama panggilan sendiri serta-merta mula melaksanakan dan memulakan setiap modul jQuery untuk mengelak daripada merosakkan dan mencemarkan pembolehubah global serta menjejaskan kod lain.
(fungsi(tetingkap, tidak ditentukan){
var jQuery = ...
//...
window.jQuery = window.$ = jQuery;
})(tetingkap);
Selain itu, anda mungkin berfikir bahawa lebih mudah untuk "menulis bagaimana anda mahu dahulu dan menyusunnya kemudian", tetapi pengaturcara yang baik akan sentiasa memberi perhatian kepada struktur program, terus mengklasifikasikan fungsi yang berkaitan dan memisahkan komponen yang tidak berkaitan . dan masukkan tingkah laku ini sebagai sebahagian daripada proses pengaturcaraan.
Memandangkan ruang nama global ialah satu-satunya cara untuk komponen bebas dalam program JavaScript berinteraksi, penggunaan kawalan yang dinamakan secara global tidak dapat dielakkan. Komponen atau perpustakaan perlu menentukan beberapa pembolehubah global. untuk digunakan oleh bahagian lain program. Jika tidak, lebih baik menggunakan pembolehubah tempatan.
this.foo ;//undefined
foo = "foo global";
this.foo ;//"foo global"
var foo = "foo global";
this.foo = "berubah";
foo ;//berubah
Ruang nama global JavaScript juga terdedah kepada objek global yang boleh diakses dalam skop global program, yang berfungsi sebagai nilai awal kata kunci ini. Dalam pelayar web, objek global terikat pada pembolehubah tetingkap global. Ini bermakna anda mempunyai dua cara untuk mencipta pembolehubah global: mengisytiharkannya menggunakan var dalam skop global, atau menambahnya pada objek global. Kelebihan menggunakan perisytiharan var ialah ia dapat menyatakan dengan jelas kesan pembolehubah global dalam skop program.
Memandangkan rujukan kepada pembolehubah global terikat boleh menyebabkan ralat masa jalan, memastikan skop yang jelas dan ringkas akan memudahkan pengguna kod anda memahami pembolehubah global yang diisytiharkan oleh program.
Memandangkan objek global menyediakan mekanisme tindak balas dinamik untuk persekitaran global, anda boleh menggunakannya untuk menanyakan persekitaran yang sedang berjalan dan mengesan ciri yang tersedia pada platform ini.
cth.ES5 memperkenalkan objek JSON global untuk membaca dan menulis data dalam format JSON.
jika(!this.JSON){
This.JSON = {
huraikan: ..,
stringify: ... }
}
Reka bentuk asal kursus struktur data mensimulasikan operasi asas rentetan, yang memerlukan kaedah yang disediakan oleh bahasa itu sendiri tidak boleh digunakan. JavaScript melaksanakan operasi asas pada tatasusunan dengan sangat baik Jika ia hanya untuk keperluan pembelajaran umum, idea untuk mensimulasikan kaedah yang disediakan oleh bahasa itu sendiri adalah baik, tetapi jika anda benar-benar melabur dalam pembangunan, tidak perlu. pertimbangkan untuk menggunakan kaedah terbina dalam JavaScript di tempat pertama.
1.2 Elakkan menggunakan dengan
Pernyataan dengan memberikan sebarang "kemudahan" yang menjadikan aplikasi anda tidak boleh dipercayai dan tidak cekap. Kita perlu memanggil satu siri kaedah pada satu objek dalam urutan. Menggunakan pernyataan dengan boleh mengelakkan rujukan berulang pada objek dengan mudah:
var widget = Widget baharu();
dengan(widget){
setLatar Belakang("biru");
setForeground("putih");
setText("Status : " maklumat);
tunjukkan();
}
}
dengan(Matematik){
pulangan min(bulat(x),sqrt(y));//Rujukan abstrak
}
}
Sebaliknya dengan bahasa, cara mudah ialah mengikat objek kepada nama pembolehubah pendek.
status fungsi(maklumat){
var w = Widget baharu();
w.setBackground("biru");
w.setForeground("putih");
w.setText("Status : " maklumat);
w.show();
}
Dalam kes lain, pendekatan terbaik ialah mengikat pembolehubah setempat secara eksplisit pada harta yang berkaitan.
fungsi f(x,y){
var min = Math.min,
bulat = Math.round,
sqrt = Math.sqrt; Kembalikan min(bulat(x),sqrt(y));
}
1.3 Mahir dalam penutupan
Terdapat satu konsep untuk memahami penutupan:
a) JavaScript membenarkan anda merujuk pembolehubah yang ditakrifkan di luar fungsi semasa.
var magicIngredient = "mentega kacang";
fungsi membuat(mengisi){
kembalikan bahan ajaib " dan " pengisian;
}
Return make("jeli");
}
makeSandwich();// "mentega kacang dan jeli"
b) Walaupun fungsi luaran telah kembali, fungsi semasa masih boleh merujuk pembolehubah yang ditakrifkan dalam fungsi luaran
var magicIngredient = "mentega kacang";
fungsi membuat(mengisi){
kembalikan bahan ajaib " dan " pengisian;
}
Pulangan buat; }
var f = sandwichMaker();
f ("jeli"); f("pisang"); // "mentega kacang dan pisang"
f("mallow"); // "mentega kacang dan mallow"
Nilai fungsi javascriptd mengandungi lebih banyak maklumat daripada kod yang diperlukan untuk dilaksanakan apabila ia dipanggil. Tambahan pula, nilai fungsi JavaScript juga menyimpan pembolehubah dalaman yang mungkin mereka rujuk yang ditakrifkan dalam skop lampirannya. Fungsi yang menjejaki pembolehubah dalam skop yang diliputinya dipanggil penutupan.
Fungsi boleh merujuk mana-mana pembolehubah dalam skopnya, termasuk parameter dan pembolehubah fungsi luaran. Kita boleh memanfaatkan ini untuk menulis fungsi pembuat sandwic yang lebih umum.
}
Pulangan buat; }
var f = sandwichMaker("ham");
f("keju"); // "ham dan keju"
f("mustard"); // "ham dan mustard"
Penutupan ialah salah satu ciri JavaScript yang paling elegan dan ekspresif dan merupakan nadi kepada banyak simpulan bahasa.
c) Penutupan boleh mengemas kini nilai pembolehubah luaran. Malah, penutupan menyimpan rujukan kepada pembolehubah luaran, bukan salinan nilainya. Oleh itu, kemas kini boleh dibuat untuk sebarang penutupan yang mempunyai akses kepada pembolehubah luaran ini.
kotak fungsi(){
var val = tidak ditentukan;
Kembali {
set: function(newval) {val = newval;},
Dapatkan: function (){return val;},
type: function(){return typeof val;}
};
}
var b = kotak();
b.type(); //undefined
b.set(98.6);
b.get();//98.6
b.type();//nombor
Contoh ini menghasilkan objek yang mengandungi tiga penutupan. Tiga penutupan ini ditetapkan, taip dan dapatkan sifat Mereka semua berkongsi akses kepada pembolehubah val. Penutupan set mengemas kini nilai val. Kemudian panggil dapatkan dan taip untuk melihat hasil yang dikemas kini.
1.4 Memahami penambahbaikan pengisytiharan berubah
Javascript menyokong kaedah skop ini (rujukan kepada pembolehubah foo akan terikat pada skop yang paling hampir dengan pengisytiharan pembolehubah foo), tetapi tidak menyokong skop peringkat blok (skop definisi pembolehubah bukanlah skop lampiran terdekat) pernyataan atau blok kod).
Tidak memahami ciri ini akan membawa kepada beberapa pepijat halus:
fungsi ialahPemenang(pemain,lain-lain){
var tertinggi = 0;
for(var i = 0,n = others.length ;i
Jika(pemain.skor > tertinggi){
tertinggi = pemain. skor; }
}
Pulangan pemain.skor > }
Kod fungsi yang sama juga boleh digunakan sebagai ungkapan, tetapi ia mempunyai makna yang berbeza sama sekali. Perbezaan rasmi antara fungsi tanpa nama dan ungkapan fungsi bernama ialah yang terakhir terikat kepada pembolehubah dengan nama fungsi yang sama seperti pembolehubah tempatan fungsi. Ini boleh digunakan untuk menulis ungkapan fungsi rekursif.
Salin kod
Perlu diperhatikan bahawa skop carian pembolehubah hanya dalam fungsinya sendiri Tidak seperti pengisytiharan fungsi, ungkapan fungsi yang dinamakan tidak boleh dirujuk secara luaran melalui nama fungsi dalaman mereka.
Salin kod
Program ini kelihatan seperti akan menjana null, tetapi ia sebenarnya akan menjana objek baharu.
Oleh kerana skop pembolehubah fungsi yang dinamakan mewarisi Object.prototype.constructor (iaitu, pembina Object), sama seperti pernyataan with, skop ini akan dipengaruhi oleh perubahan dinamik Object.prototype. Cara untuk mengelakkan objek mencemarkan skop ungkapan fungsi dalam sistem anda adalah untuk mengelak daripada menambah sifat pada Object.prototype pada bila-bila masa dan untuk mengelak daripada menggunakan sebarang pembolehubah tempatan dengan nama yang sama dengan sifat Object.prototype standard.
Satu lagi kelemahan dalam enjin JavaScript yang popular ialah promosi pengisytiharan ungkapan fungsi yang dinamakan.
var f = fungsi g(){return 17;}
g(); //17 (dalam persekitaran tidak selaras)
Sesetengah persekitaran JavaScript malah menganggap kedua-dua fungsi f dan g sebagai objek berbeza, mengakibatkan peruntukan memori yang tidak diperlukan.
1.6 Berhati-hati dengan pengisytiharan skop yang janggal untuk fungsi blok tempatan
fungsi f() {kembali "global" ; ujian fungsi(x){
Fungsi f(){return "local";}
hasil var = [];
Jika(x){
result.push(f());
}
result.push(f());
keputusan keputusan;
}
test(true); //["local","local"]
test(false); //["tempatan"]
hasil var = [];
Jika(x){
fungsi f(){return "local";}
result.push(f());
}
result.push(f());
keputusan keputusan;
}
test(true); //["local","local"]
test(false); //["tempatan"]

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan C# untuk menulis algoritma penapis Bloom The Bloom Filter (BloomFilter) ialah struktur data yang sangat cekap ruang yang boleh digunakan untuk menentukan sama ada sesuatu elemen tergolong dalam set. Idea asasnya ialah untuk memetakan elemen ke dalam tatasusunan bit melalui pelbagai fungsi cincang bebas dan menandakan bit tatasusunan bit yang sepadan sebagai 1. Apabila menilai sama ada elemen tergolong dalam set, anda hanya perlu menilai sama ada bit tatasusunan bit yang sepadan adalah kesemuanya 1. Jika mana-mana bit adalah 0, ia boleh dinilai bahawa elemen itu tiada dalam set. Penapis Bloom menampilkan pertanyaan pantas dan

Cara menulis fungsi eksponen dalam bahasa C Eksponen (pengeksponenan) ialah operasi yang biasa digunakan dalam matematik, yang bermaksud mendarab nombor dengan sendirinya beberapa kali. Dalam bahasa C, kita boleh melaksanakan fungsi ini dengan menulis fungsi kuasa. Berikut akan memperkenalkan secara terperinci cara menulis fungsi kuasa dalam bahasa C dan memberikan contoh kod tertentu. Tentukan input dan output fungsi Input fungsi kuasa biasanya mengandungi dua parameter: asas dan eksponen, dan output adalah hasil yang dikira. oleh itu, kami

Sistem tempahan hotel ialah sistem pengurusan maklumat penting yang boleh membantu hotel mencapai pengurusan yang lebih cekap dan perkhidmatan yang lebih baik. Jika anda ingin mempelajari cara menggunakan C++ untuk menulis sistem tempahan hotel yang ringkas, maka artikel ini akan memberikan anda rangka kerja asas dan langkah pelaksanaan terperinci. Keperluan Fungsian Sistem Tempahan Hotel Sebelum membangunkan sistem tempahan hotel, kita perlu menentukan keperluan fungsian untuk pelaksanaannya. Sistem tempahan hotel asas perlu melaksanakan sekurang-kurangnya fungsi berikut: (1) Pengurusan maklumat bilik: termasuk jenis bilik, nombor bilik, bilik

Cara menggunakan C# untuk menulis algoritma pengaturcaraan dinamik Ringkasan: Pengaturcaraan dinamik ialah algoritma biasa untuk menyelesaikan masalah pengoptimuman dan sesuai untuk pelbagai senario. Artikel ini akan memperkenalkan cara menggunakan C# untuk menulis algoritma pengaturcaraan dinamik dan memberikan contoh kod khusus. 1. Apakah algoritma pengaturcaraan dinamik (DP) ialah idea algoritma yang digunakan untuk menyelesaikan masalah dengan submasalah yang bertindih dan sifat substruktur yang optimum. Pengaturcaraan dinamik menguraikan masalah kepada beberapa sub-masalah untuk diselesaikan, dan merekodkan penyelesaian kepada setiap sub-masalah.

Bagaimana untuk menggunakan C++ untuk menulis sistem pemilihan kursus pelajar yang mudah? Dengan perkembangan teknologi yang berterusan, pengaturcaraan komputer telah menjadi kemahiran penting. Dalam proses pembelajaran pengaturcaraan, sistem pemilihan kursus pelajar yang mudah boleh membantu kami memahami dan menggunakan bahasa pengaturcaraan dengan lebih baik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan C++ untuk menulis sistem pemilihan kursus pelajar yang mudah. Pertama, kita perlu menjelaskan fungsi dan keperluan sistem pemilihan kursus ini. Sistem pemilihan kursus pelajar asas biasanya merangkumi bahagian berikut: pengurusan maklumat pelajar, pengurusan maklumat kursus, pemilihan

Bagaimana untuk menulis permainan penyapu ranjau mudah dalam C++? Penyapu ranjau ialah permainan teka-teki klasik yang memerlukan pemain mendedahkan semua blok mengikut susun atur medan periuk api yang diketahui tanpa memijak lombong. Dalam artikel ini, kami akan memperkenalkan cara menulis permainan penyapu ranjau mudah menggunakan C++. Pertama, kita perlu menentukan tatasusunan dua dimensi untuk mewakili peta permainan Penyapu Ranjau. Setiap elemen dalam tatasusunan boleh menjadi struktur yang digunakan untuk menyimpan status blok, seperti sama ada ia didedahkan, sama ada terdapat lombong, dsb. Di samping itu, kita juga perlu menentukan

Bagaimana untuk menulis algoritma KNN dalam Python? KNN (K-NearestNeighbors, K algoritma jiran terdekat) ialah algoritma pengelasan yang mudah dan biasa digunakan. Ideanya adalah untuk mengelaskan sampel ujian ke dalam jiran K terdekat dengan mengukur jarak antara sampel yang berbeza. Artikel ini akan memperkenalkan cara menulis dan melaksanakan algoritma KNN menggunakan Python, dan memberikan contoh kod khusus. Pertama, kita perlu menyediakan beberapa data. Katakan kita mempunyai set data dua dimensi, dan setiap sampel mempunyai dua ciri. Kami membahagikan set data kepada

Cara menggunakan C# untuk menulis algoritma carian binari Algoritma carian binari ialah algoritma carian yang cekap yang mencari kedudukan elemen tertentu dalam tatasusunan tertib, dengan kerumitan masa O(logN). Dalam C#, kita boleh menulis algoritma carian binari melalui langkah-langkah berikut. Langkah 1: Sediakan data Mula-mula, kita perlu menyediakan tatasusunan yang diisih sebagai data sasaran untuk carian. Katakan kita ingin mencari kedudukan elemen tertentu dalam tatasusunan. int[]data={1,3,5,7,9,11,13
