Kebanyakan cabaran pengekodan mengajar anda untuk menyelesaikan teka-teki. Pelan kajian JavaScript 30 Hari LeetCode melakukan sesuatu yang berbeza: ia menunjukkan kepada anda cara kepingan teka-teki boleh berubah menjadi batu bata, bersedia untuk membina projek dunia sebenar.
Perbezaan ini penting. Apabila anda menyelesaikan masalah algoritma biasa, anda sedang melatih minda anda untuk berfikir secara abstrak. Tetapi apabila anda melaksanakan fungsi1 nyahlantun atau membina pemancar peristiwa2, anda sedang mempelajari cara perisian sebenar berfungsi.
Saya menemui perkara ini semasa menangani cabaran itu sendiri. Pengalaman itu kurang seperti menyelesaikan pengusik otak dan lebih seperti arkeologi - mendedahkan konsep JavaScript moden yang khusus. Setiap bahagian memfokuskan pada satu lagi ciri moden JS.
Perkara yang unik tentang rancangan kajian ini ialah ia tidak akan mengajar anda JavaScript. Malah, saya percaya anda perlu sudah mengetahui JavaScript dengan munasabah untuk mendapat manfaat daripadanya. Apa yang diajarnya ialah cara JavaScript sebenarnya digunakan untuk menyelesaikan masalah kejuruteraan sebenar.
Pertimbangkan cabaran Memoize3. Di permukaan, ini mengenai hasil fungsi caching. Tetapi perkara yang anda benar-benar pelajari ialah mengapa perpustakaan seperti React memerlukan penghafalan untuk mengendalikan pemaparan komponen dengan cekap. Atau ambil masalah Debounce1 - ia bukan hanya tentang melaksanakan kelewatan; ia membantu anda memahami, secara langsung, mengapa setiap rangka kerja bahagian hadapan moden, lif, dan pada asasnya mana-mana sistem dengan UI interaktif, memerlukan corak ini.
Tumpuan pada corak praktikal dan bukannya asas bahasa ini mewujudkan kekangan yang menarik; anda perlu berada dalam satu daripada dua kedudukan untuk mendapat manfaat:
- Anda memahami asas CS (terutamanya Struktur Data dan Algoritma) dan selesa dengan JavaScript
- Anda kuat dalam teori CS dan mempunyai pendedahan JavaScript sebelumnya
Merapatkan CS dan Kejuruteraan Perisian
Sesuatu yang ganjil berlaku antara mempelajari sains komputer dan mempraktikkan kejuruteraan perisian. Peralihan itu terasa seperti mempelajari teori catur selama bertahun-tahun, hanya untuk mendapati diri anda bermain permainan yang berbeza sepenuhnya - yang peraturannya terus berubah dan kebanyakan pergerakan tiada dalam mana-mana buku.
Dalam CS, anda mempelajari cara pokok binari berfungsi. Dalam kejuruteraan perisian, anda menghabiskan berjam-jam menyahpepijat API anda, cuba memahami sebab caching respons tidak berfungsi. Dari jauh, pertindihan antara dunia ini mungkin kelihatan jauh lebih besar daripada yang sebenarnya. Terdapat jurang di sana, dan ia sering boleh mengejutkan graduan CS apabila mereka memulakan kerjaya mereka. Malangnya, kebanyakan sumber pendidikan gagal untuk merapatkannya. Ia sama ada kekal secara teori semata-mata ("begini cara quicksort berfungsi") atau praktikal semata-mata ("begini cara untuk menggunakan apl React").
Apa yang menjadikan rancangan kajian JavaScript ini menarik bukan kerana ia direka dengan baik - tetapi ia mewujudkan hubungan antara dunia ini. Ambil masalah hafalan: 2623. Memoize3. Dalam istilah CS, ini mengenai caching nilai yang dikira. Tetapi melaksanakannya memaksa anda untuk bergelut dengan keanehan JavaScript di sekitar rujukan objek, konteks fungsi dan pengurusan memori. Tiba-tiba,
anda bukan sahaja mempelajari algoritma - anda mula memahami mengapa sesuatu seperti Redis wujud.
Gaya ini berulang sepanjang cabaran. Pelaksanaan Pemancar Acara2 bukan hanya mengenai corak pemerhati buku teks - anda boleh melihatnya sebagai sebab mengapa mengeluarkan enjin V8 daripada penyemak imbas dan membina Node.js di sekelilingnya, sebenarnya masuk akal . The Promise Pool4 menangani pelaksanaan selari, a.k.a., sebab pangkalan data anda memerlukan pengehadan sambungan.
Kurikulum Tersembunyi
Jujukan masalah dalam rancangan kajian ini bukan secara rawak. Ia membina model mental JavaScript moden, lapisan demi lapisan.
Ia bermula dengan penutupan. Bukan kerana penutupan ialah konsep yang paling mudah - ia sangat mengelirukan - tetapi kerana ia adalah asas kepada cara JavaScript mengurus keadaan.
function createCounter(init) { let count = init; return function() { return count++; } } const counter1 = createCounter(10); console.log(counter1()); // 10 console.log(counter1()); // 11 console.log(counter1()); // 12 // const counter1 = createCounter(10); // when this^ line executes: // - createCounter(10) creates a new execution context // - local variable count is initialized to 10 // - a new function is created and returned // - this returned function maintains access // to the count variable in its outer scope // - this entire bundle // (function (the inner one) + its access to count) // is what we call a closure
Corak ini ialah benih semua pengurusan negeri dalam JavaScript. Sebaik sahaja anda memahami cara kaunter ini berfungsi, anda memahami cara useState React berfungsi di bawah hud. Anda faham sebab corak modul muncul dalam JavaScript pra-ES6.
Kemudian rancangan bergerak ke transformasi berfungsi. Ini mengajar anda hiasan fungsi - di mana fungsi membalut fungsi lain untuk mengubah suai tingkah laku mereka. Ini bukan sekadar helah teknikal; begitulah cara perisian tengah Express berfungsi, cara komponen tertib tinggi React beroperasi,
dan juga cara penghias TypeScript berfungsi.
Apabila anda mencapai cabaran tak segerak, anda bukan sahaja belajar tentang Janji - anda akan menemui sebab JavaScript memerlukannya sejak awal. Masalah The Promise Pool4 tidak mengajar anda konsep JS yang inovatif dan unik; ia menunjukkan kepada anda sebab pengumpulan sambungan wujud dalam setiap enjin pangkalan data.
Berikut ialah pemetaan kasar bahagian rancangan kajian kepada konsep kejuruteraan perisian dunia sebenar:
- Penutupan → Pengurusan Negeri
- Transformasi Tatasusunan Asas → Kemahiran asas (bantu); Contoh Praktikal: Manipulasi Data
- Transformasi Fungsi → Corak Pertengahan
- Janji dan Masa -> Aliran Kawalan Async
- JSON -> Kemahiran asas (bantuan); Contoh Praktikal: Pensirian Data, Komunikasi API
- Kelas (terutamanya dalam konteks Pemancar Acara) → Sistem Penghantaran Mesej
- Bonus (Premium Dikunci) -> Campuran cabaran yang lebih sukar yang mungkin disertakan dalam bahagian yang disebutkan di atas; Promise Pool4 ialah kolam kegemaran saya dari bahagian ini
Pengecaman Corak, Bukan Penyelesaian Masalah
Mari kita rungkai beberapa masalah yang mempamerkan nilai sebenar rancangan kajian ini.
- Hafal (#2623)
Pertimbangkan cabaran Memoize. Apa yang saya suka tentangnya, ialah hakikat bahawa penyelesaian terbaik (yang saya dapat buat)
sangat mudah, seolah-olah kod itu sendiri memberitahu anda dengan lembut apa yang dilakukannya (masih, saya sertakan beberapa ulasan).
Ini tidak menjadikan #2623 masalah mudah, dengan apa cara sekalipun. Saya memerlukan 2 lelaran sebelumnya untuk menjadikannya sebersih ini:
function createCounter(init) { let count = init; return function() { return count++; } } const counter1 = createCounter(10); console.log(counter1()); // 10 console.log(counter1()); // 11 console.log(counter1()); // 12 // const counter1 = createCounter(10); // when this^ line executes: // - createCounter(10) creates a new execution context // - local variable count is initialized to 10 // - a new function is created and returned // - this returned function maintains access // to the count variable in its outer scope // - this entire bundle // (function (the inner one) + its access to count) // is what we call a closure
- Debounce (#2627)
Bayangkan anda berada di dalam lif, dan ada seseorang yang terkial-kial menekan butang "tutup pintu" berulang kali.
tekan tekan tekan tekan tekan
Tanpa melenting: Lif akan cuba menutup pintu pada setiap kali ditekan, menjadikan mekanisme pintu berfungsi dengan tidak cekap dan mungkin pecah.
Dengan nyahlantun: Lif menunggu sehingga orang itu berhenti menekan untuk masa tertentu (katakan 0.5 saat) sebelum benar-benar cuba menutup pintu. Ini adalah lebih cekap.
Ini satu lagi senario:
Bayangkan anda sedang melaksanakan ciri carian yang mengambil hasil sebagai jenis pengguna:
Tanpa melenting:
/** * @param {Function} fn * @return {Function} */ function memoize(fn) { // Create a Map to store our results const cache = new Map(); return function(...args) { // Create a key from the arguments const key = JSON.stringify(args); // If we've seen these arguments before, return cached result if (cache.has(key)) { return cache.get(key); } // Otherwise, calculate result and store it const result = fn.apply(this, args); cache.set(key, result); return result; } } const memoizedFn = memoize((a, b) => { console.log("computing..."); return a + b; }); console.log(memoizedFn(2, 3)); // logs "computing..." and returns 5 console.log(memoizedFn(2, 3)); // just returns 5, no calculation console.log(memoizedFn(3, 4)); // logs "computing..." and returns 7 // Explanantion: // It's as if our code had access to an external database // Cache creation // const cache = new Map(); // - this^ uses a closure to maintain the cache between function calls // - Map is perfect for key-value storage // Key creation // const key = JSON.stringify(args); // - this^ converts arguments array into a string // - [1,2] becomes "[1,2]" // - we are now able to use the arguments as a Map key // Cache check // if (cache.has(key)) { // return cache.get(key); // } // - if we've seen these arguments before, return cached result; // no need to recalculate
Ini akan membuat 10 panggilan API. Kebanyakannya tidak berguna kerana pengguna masih menaip.
Dengan nyahlantun (kelewatan 300ms):
// typing "javascript" 'j' -> API call 'ja' -> API call 'jav' -> API call 'java' -> API call 'javas' -> API call 'javasc' -> API call 'javascr' -> API call 'javascri' -> API call 'javascrip' -> API call 'javascript' -> API call
Menyahlantun adalah seperti memberitahu kod anda: "Tunggu sehingga pengguna berhenti melakukan sesuatu selama X milisaat sebelum benar-benar menjalankan fungsi ini."
Inilah penyelesaian untuk LeetCode #2627:
// typing "javascript" 'j' 'ja' 'jav' 'java' 'javas' 'javasc' 'javascr' 'javascri' 'javascrip' 'javascript' -> API call (only one call, 300ms after user stops typing)
Kes penggunaan dunia nyata biasa lain untuk nyahlantun (selain daripada bar carian):
- Simpan draf (tunggu sehingga pengguna berhenti mengedit)
- Butang serah (halang serahan berganda)
Apa Salahnya
Saya berharap, daripada nada positif keseluruhan artikel ini, pendapat saya tentang 30 Hari JS telah menjadi jelas sekarang.
Tetapi tiada sumber pendidikan yang sempurna, dan, apabila melibatkan batasan, kejujuran adalah berharga. Pelan kajian ini mempunyai beberapa titik buta yang patut diteliti.
Pertama, rancangan pengajian mengambil tahap pengetahuan sedia ada.
Jika anda belum selesa dengan JavaScript, beberapa cabaran boleh menjadi berat. Ini boleh mengecewakan bagi pemula yang mungkin mempunyai jangkaan lain daripada rancangan pengajian.
Kedua, cabaran dibentangkan secara terpencil.
Ini masuk akal pada mulanya, tetapi boleh menjadi perkara yang mengecewakan untuk disedari semasa anda meneruskan rancangan. Masalah dunia sebenar selalunya memerlukan gabungan pelbagai corak dan teknik. Pelan kajian boleh mendapat manfaat daripada cabaran yang lebih bersepadu yang memerlukan penggunaan beberapa konsep bersama-sama (pengecualian: kami menggunakan penutupan sepanjang rancangan). Ini boleh dimuatkan dengan baik dalam bahagian Bonus (yang telah dikhaskan kepada pengguna premium).
Akhirnya, kelemahan utama set cabaran ini terletak pada penjelasan konsepnya. Datang daripada pengaturcaraan kompetitif,
Saya sudah biasa mengosongkan takrif istilah dan konsep baharu dalam penyataan masalah. Walau bagaimanapun, penerangan LeetCode selalunya tidak perlu rumit - memahami penjelasan mereka tentang fungsi nyahlantun adalah lebih sukar daripada melaksanakan penyelesaian sebenar.
Walaupun kekurangannya, rancangan kajian adalah sumber yang berharga untuk memahami JavaScript moden.
Melangkaui 30 Hari
Memahami corak ini hanyalah permulaan.
Cabaran sebenar ialah mengenali masa dan cara menggunakannya dalam kod pengeluaran. Inilah yang saya temui selepas menemui corak ini di alam liar.
Pertama, corak ini jarang muncul secara berasingan. Pangkalan kod sebenar menggabungkannya dengan cara yang tidak dapat diterokai oleh cabaran. Pertimbangkan ciri carian, dilaksanakan dari awal. Anda mungkin mendapati diri anda menggunakan:
- Debounce untuk pengendalian input
- Memoisasi untuk caching hasil
- Janjikan tamat masa untuk panggilan API
- Pemancar acara untuk pengurusan keadaan carian
Semua corak ini berinteraksi, mewujudkan kerumitan yang tiada satu cabaran pun menyediakan anda. Tetapi, setelah melaksanakan setiap bahagian sendiri, anda mendapat gambaran umum tentang bagaimana keseluruhan pelaksanaan sepatutnya berfungsi.
Sebaliknya, kemahiran paling berharga yang akan anda perolehi bukanlah melaksanakan corak ini - ia mengiktirafnya dalam kod orang lain.
Fikiran Akhir
Selepas melengkapkan rancangan kajian ini, temu bual pengekodan bukan satu-satunya tempat anda akan mengenali corak ini.
Anda akan melihatnya dalam kod sumber terbuka, dalam permintaan tarik rakan sekerja anda dan mungkin mula menyedarinya dalam projek anda yang lalu. Anda mungkin telah melaksanakannya sebelum ini, tanpa menyedarinya. Paling penting, anda akan faham sebab mereka ada.
Apa yang bermula sebagai penyelesaian teka-teki berubah menjadi pemahaman yang lebih mendalam tentang ekosistem JavaScript moden.
Itulah jurang yang diisi oleh rancangan pengajian ini: merapatkan pengetahuan teori dengan kebijaksanaan kejuruteraan praktikal.
-
2627. Debounce (Janji dan Masa) ↩
-
2694. Pemancar Acara (Kelas) ↩
-
2623. Memoize (Transformasi Fungsi) ↩
-
2636. Kolam Janji (Bonus) ↩
Atas ialah kandungan terperinci Jurang Yang Sebenarnya Diisi JavaScript Hari-hari LeetCode. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr


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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma
