10 soalan setiap hari Selepas 100 hari, anda akan menguasai semua mata pengetahuan frekuensi tinggi temuduga hadapan. ! ! , semasa membaca artikel itu, saya harap anda tidak melihat jawapan secara langsung, tetapi fikirkan dahulu sama ada anda mengetahuinya, dan jika ya, apakah jawapan anda? Fikirkan tentangnya dan kemudian bandingkan dengan jawapannya Adakah lebih baik, jika anda mempunyai jawapan yang lebih baik daripada saya, sila tinggalkan mesej di kawasan komen dan bincangkan keindahan teknologi bersama-sama.
Saya: Eh~, kami tahu perkara iniTerdapat peraturan bahawa sesiapa yang memanggil menunjuk kepada siapa Ayat ini secara halus akan membawa kepada beberapa salah faham Sekarang kami meringkaskan kesilapan yang mungkin seperti berikut dan memberikan kod:
1. ) Kita perlu tahu bahawa jika kita mendapat ini secara global, ini akan menghala ke tingkap, kerana semua yang kita gunakan secara global akan dipasang pada tetingkap.
<script> console.log(this) // 指向window function a(){ console.log(this) } a() // 相当于 window.a(),指向的依旧是 window </script>
2) Saya perlu tahu bahawa perkara ini akan menunjukkan kepada pemanggil sebelumnya Kodnya adalah seperti berikut:
Selepas membaca kod, kita tahu bahawa walaupun ia adalah. pada asasnya dipanggil kerana fungsi d, tetapi masih terdapat lapisan di tengah di mana c memanggil fungsi d, jadi ini menunjuk ke peringkat atas dan terdapat prinsip kedekatan Ini sangat penting! ! !
<script> var a = { b:10, c:{ b:12, d:function(){ console.log(this) } } } a.c.d() // {b: 12, d: ƒ} </script>
3) Kita perlu tahu bahawa fungsi anak panah tidak mempunyai skop, maksudnya, ia tidak mempunyai ini sendiri soalan temuduga besar Kilang, bolehkah anda meneka apakah hasil cetakan akhir?
Dengan andaian anda telah membaca soalan temuduga ini dengan teliti, saya percaya anda sudah tahu jawapannya ialah 66. Mengapa? , anda mesti tahu bahawa fungsi anak panah tidak mempunyai ini sendiri, jadi ia perlu pergi ke peringkat atas untuk mencari ini, dan peringkat atas berada dalam skop global, jadi apa yang dicetak ialah nombor ID 66 yang dipasang secara global.
<script> var id = 66 function a(){ setTimeout(()=>{ console.log(this.id) },500) } a({id:22}) // 猜猜结果是什么? </script>
Kemudian bagaimana kita mengubah titik ini untuk mengawal ini untuk menunjukkan hasil yang kita mahukan? Tiga kaedah berikut diberikan:
<script> var id = 66 function a(){ setTimeout(()=>{ console.log(this.id || this) },500) } // call => {} 改变之后并执行一次 a.call({id:22}) // 打印22 // apply => [] 改变之后并执行一次 a.apply([12]) // 打印 [12] // bind() 不调用,只改变this指向 a.bind(a(id=32)) // 32 </script>
Saya: Eh~, okay, ringkasannya adalah seperti berikut:
Tiga kaedah panggilan apply bind boleh digunakan untuk menukar titik fungsi ini , perbezaan khusus adalah seperti berikut:
1) fn.call (newThis,params) Parameter pertama fungsi panggilan ialah penunjuk baharu ini, yang akan digunakan oleh fungsi fn secara bergilir-gilir. Fungsi fn akan dilaksanakan serta-merta.
2) fn.apply (newThis,paramsArr) Parameter pertama fungsi apply ialah penunjuk baharu ini, dan parameter kedua ialah tatasusunan parameter yang akan digunakan oleh fn, dan fungsi fn akan dilaksanakan serta merta.
3) fn.bind (newThis,params) Parameter pertama fungsi bind ialah penunjuk baharu ini Parameter seterusnya boleh dihantar terus atau dalam bentuk tatasusunan. Fungsi fn tidak akan dilaksanakan serta-merta, dan penunjuk fungsi fn hanya boleh ditukar sekali. Apa yang dikembalikan ialah fn baharu yang telah mengubah maksud ini
Saya: Eh~ Nah, delegasi acara menggunakan acara menggelegak untuk mengurus semua acara jenis tertentu dengan menyatakan hanya satu pengendali acara. Secara terang-terangan, ia bermaksud melampirkan peristiwa yang belum berlaku kepada peristiwa yang telah berlaku. Keseluruhan kod adalah seperti berikut:
<body> <ul id="ul"> <li>0</li> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> <button id="btn">点我添加一个li</button> <script> // 事件委托 let ul = document.getElementById("ul") ul.addEventListener('click',(event)=>{ console.log(event) event = event || window.event let target = event.target if(target.nodeName == 'LI'){ alert(target.innerHTML) } }) let btn = document.getElementById('btn') btn.addEventListener('click',()=>{ let li = document.createElement('li') li.textContent = ul.children.length ul.appendChild(li) }) </script> </body>
Saya: Uh~, okey, Promise ialah pembina yang disediakan oleh ES6 Anda boleh menggunakan pembina Promise yang baharu untuk mencipta instance fungsi mempunyai Dua parameter ialah dua fungsi selesaikan dan tolak, selesaikan Tukar keadaan Promise daripada menunggu kepada kejayaan, dan luluskan hasil operasi tak segerak sebagai parameter tolak menukar keadaan daripada menunggu kepada kegagalan, dan panggilnya apabila operasi tak segerak; gagal. Ralat yang dilaporkan oleh operasi tak segerak diluluskan sebagai parameter. Selepas kejadian dibuat, anda boleh menggunakan kaedah kemudian untuk menentukan fungsi panggil balik kejayaan atau kegagalan masing-masing, atau anda boleh menggunakan tangkap untuk menangkap kegagalan, kemudian dan menangkap akhirnya mengembalikan Janji, supaya mereka boleh dipanggil dalam rantai.
Peranan Janji:
Promise ialah tugas mikro tak segerak, yang menyelesaikan masalah panggilan balik bersarang berbilang lapisan tak segerak dan membuat kod boleh dibaca Prestasi yang lebih tinggi dan lebih mudah untuk mengekalkan Promise menggunakan
Ciri Promise :
1) Keadaan objek tidak dipengaruhi oleh dunia luar
2) Setelah keadaan berubah, ia tidak akan berubah lagi Anda boleh mendapatkan hasil ini pada bila-bila masa
3) Parameter kaedah penyelesaian ialah parameter panggilan balik. berfungsi pada masa itu, dan parameter kaedah tolak ialah parameter tangkapan
4) Selagi kaedah itu dan kaedah tangkapan tidak melaporkan ralat, mereka akan mengembalikan janji terisi penuh
Senario aplikasi :
Menyelesaikan masalah panggilan balik neraka
Untuk kaedah penggunaan khusus, sila rujuk artikel saya sebelum ini: Memahami Janji dalam JS dalam satu artikel
Saya: Baiklah, ringkasannya adalah seperti berikut:
Apa itu domain silang:
Jika alamat yang diminta oleh antara muka dalam halaman semasa berbeza daripada alamat halaman semasa, ia dikatakan bahawa antara muka adalah merentas domain.
Sebab untuk sekatan merentas domain:Untuk memastikan keselamatan halaman web, penyemak imbas mempunyai dasar protokol asal yang sama.
Penyelesaian domain silang:
kors:
Pada masa ini daripada penyelesaian yang paling biasa ialah membenarkan pelaksanaan merentas domain dengan menyediakan bahagian belakang.
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader("Access-Control-Allow-Methods", "GET, PUT, OPTIONS, POST");perisian tengah nod, proksi terbalik nginx:
Pelayar tidak boleh mengakses pelayan merentas domain apabila terdapat sekatan merentas domain, perisian tengah nod dan proksi terbalik nginx membenarkan permintaan dihantar ke pelayan proksi Halaman statik dan pelayan proksi mempunyai asal yang sama, dan kemudian pelayan proksi menghantar permintaan ke pelayan akhir tidak ada sekatan homologi antara pelayan dan pelayan .
JSONP: Prinsip yang digunakan olehialah teg skrip boleh meminta sumber merentas domain dan fungsi panggil balik disambungkan ke dalam url sebagai satu parameter. Bahagian belakang menerima permintaan, memanggil fungsi panggil balik dan mengembalikan data sebagai parameter Beri perhatian kepada menetapkan pengepala respons untuk mengembalikan jenis dokumen, yang harus ditetapkan kepada javascript.
Saya: Baiklah, JavaScript mempunyai 4 cara untuk menentukan jenis pembolehubah, diringkaskan seperti berikut:
jenis :
sering digunakan untuk menentukan jenis data asas Untuk jenis data rujukan, kecuali fungsi mengembalikan 'fungsi', semua yang lain mengembalikan 'objek'.
instanceof:
digunakan terutamanya untuk membezakan jenis data rujukan Kaedah pengesanan adalah untuk mengesan jenis pada rantai prototaip arus contoh dan gunakannya Hasil yang dikesan semuanya benar
Object.prototype.toString.call()(Kaedah penghakiman rantai prototaip objek):
Berlaku untuk semua jenis pengesanan penghakiman, kaedah pengesanan ialah Object .prototype.toString.call(data) mengembalikan rentetan jenis data ini.
pembina (untuk jenis data rujukan):
digunakan untuk mengesan jenis data rujukan Kaedah pengesanan adalah untuk mendapatkan pertimbangan pembina instance dan Sama ada kelas tertentu adalah sama, jika ia adalah sama, ini bermakna data mematuhi jenis data tersebut Kaedah ini tidak akan menambah kelas lain pada rantai prototaip, mengelakkan gangguan daripada rantai prototaip.
Saya: Eh~, okey, semua tugas tak segerak dikeluarkan daripada baris gilir tugas dan dilaksanakan secara berurutan selepas pelaksanaan tugas segerak selesai. Cara biasa untuk melaksanakan pelaksanaan tak segerak adalah seperti berikut:
Fungsi panggil balik, mendengar acara, setTimeout (pemasa), Janji, async/menunggu, penjana penjana
Saya: Nah~, terdapat banyak cara untuk mengalih keluar pendua daripada tatasusunan Berikut ialah beberapa contoh dan penjelasan mudah, seperti berikut:
Gunakan kekunci atribut Objek mengecualikan pendua :
merentasi tatasusunan dan menentukan sama ada atribut itu wujud dalam objek setiap kali Jika ia tidak wujud, ia disimpan dalam tatasusunan baharu dan elemen tatasusunan digunakan sebagai kunci untuk menetapkan Nilai disimpan dalam objek dan akhirnya tatasusunan baru dikembalikan.Gunakan data jenis Set untuk tidak mempunyai pendua :
set baharu, parameter ialah tatasusunan yang perlu dinyahduplikasi dan Set akan memadamkan elemen pendua secara automatik, dan kemudian menukar Set menjadi tatasusunan dan mengembalikannya.penapis+indeks penyahduplikasi:
Gunakan kaedah penapis Array sendiri untuk mengembalikan arr.indexOf(num) sama dengan bilangan indeks.kurangkan +termasuk untuk mengalih keluar pendua:
Gunakan reduce untuk melintasi dan lulus dalam tatasusunan kosong sebagai tatasusunan baharu selepas penyahduplikasian, dan kemudian membuat pertimbangan dalaman Sama ada elemen yang dilalui pada masa ini wujud dalam tatasusunan baharu, jika tidak, ia dimasukkan ke dalam tatasusunan baharu.
Saya: Eh~, okay, fungsi anak panah bersamaan dengan fungsi tanpa nama, yang memudahkan definisi fungsi. Terdapat dua cara untuk menulis fungsi anak panah Apabila badan fungsi ialah satu pernyataan, {} dan pulangan boleh diabaikan. Yang satu lagi ialah mengandungi berbilang pernyataan dan {} dan pulangan tidak boleh ditinggalkan. Ciri terbesar fungsi anak panah ialah ia tidak mempunyai ini, jadi ini diperoleh dari luar, iaitu, ia mewarisi ini dalam konteks pelaksanaan luaran Memandangkan tiada kata kunci ini, fungsi anak panah tidak boleh digunakan sebagai a pembina. Fungsi anak panah lebih ringkas, jelas dan pantas daripada definisi fungsi biasa. Tetapi terdapat perbezaan antara keduanya: fungsi anak panah tidak mempunyai prototaip dan super, jadi ia tidak boleh mencipta ini dengan mewarisi pembolehubah dalam persekitaran fungsi luaran, jadi panggil, ikat, dan gunakan tidak boleh mengubah titik. of its this; mencari Apabila mencapai fungsi terluar biasa, ini secara amnya menunjukkan fungsi anak panah tidak boleh digunakan sebagai fungsi penjana; digunakan untuk dinamik ini dalam medan objek dan fungsi panggil balik , biasanya digunakan secara dalaman tanpa rujukan ini.
Saya: Eh~, okay, promosi berubah bermakna pembolehubah JS dan pengisytiharan fungsi akan menjadi[Pembelajaran yang disyorkan:semasa penyusunan kod , Naikkan pangkat ke hadapan kod. Premis promosi pembolehubah ialah pembolehubah diisytiharkan menggunakan kata kunci Var, dan apabila pembolehubah dipromosikan, hanya pengisytiharan dipromosikan, dan tugasan tidak dinaikkan pangkat Pada masa yang sama, promosi pengisytiharan fungsi akan diutamakan atas promosi pembolehubah. Hasil daripada promosi pembolehubah, pembolehubah boleh diakses sebelum pembolehubah dimulakan, dan tidak ditentukan dikembalikan. Fungsi boleh dipanggil sebelum ia diisytiharkan.
Pembolehubah yang diisytiharkan menggunakan let dan const dicipta dan dipromosikan, membentuk zon mati sementara Mengakses pembolehubah yang dibuat oleh let dan const sebelum pemula akan mengakibatkan ralat.
tutorial lanjutan javascript]
Atas ialah kandungan terperinci Lihat soalan temu duga bahagian hadapan ini untuk membantu anda menguasai mata pengetahuan frekuensi tinggi (7). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!