Rumah > Artikel > hujung hadapan web > 5 soalan temu bual JavaScript klasik_kemahiran javascript
1: Skop
Apakah yang akan dicetak ke konsol?
Jawapan
Kod di atas akan mencetak 5.
Helah kepada masalah ini ialah terdapat dua pengisytiharan pembolehubah, tetapi a diisytiharkan menggunakan kata kunci var. Menunjukkan bahawa ia adalah pembolehubah setempat bagi sesuatu fungsi. Sebaliknya, b menjadi pembolehubah global.
Helah lain dengan soalan ini ialah ia tidak menggunakan mod ketat ('gunakan ketat';). Jika mod ketat didayakan, kod akan menimbulkan ReferenceError: b tidak ditakrifkan. Ingat bahawa mod ketat memerlukan spesifikasi eksplisit untuk melaksanakan pengisytiharan pembolehubah global. Sebagai contoh, anda harus menulis:
console.log(b);
2: Buat kaedah "asli"
Tentukan fungsi pengulangan untuk objek rentetan. Apabila diluluskan dalam integer n, ia mengembalikan hasil pengulangan rentetan n kali. Contohnya:
Jawapan
Pelaksanaan yang mungkin kelihatan seperti ini:
Satu lagi perkara penting di sini ialah anda perlu tahu cara untuk tidak mengatasi fungsi yang mungkin sudah ditentukan. Uji bahawa definisi fungsi tidak wujud sebelum ini:
3: Penyata Menaik
Laksanakan kod ini dan hasil yang akan dikeluarkan.
Jawapan
Hasil kod ini tidak ditentukan dan 2.Sebabnya ialah pengisytiharan pembolehubah dan fungsi dibawa ke hadapan (dialihkan ke bahagian atas fungsi), tetapi pembolehubah tidak diberikan sebarang nilai. Jadi, apabila mencetak pembolehubah, ia wujud dalam fungsi (ia telah diisytiharkan), tetapi ia masih tidak ditentukan. Dalam erti kata lain, kod di atas adalah bersamaan dengan yang berikut:
console.log(foo());
}
4: Bagaimana ini berfungsi dalam JavaScript
Apakah yang akan dikeluarkan oleh kod berikut? Berikan jawapan anda.
console.log(obj.prop.getFullname());
ujian var = obj.prop.getFullname;
console.log(test());
Jawapan
Jawapannya ialah Aurelio De Rosa dan John Doe. Sebabnya ialah dalam sesuatu fungsi, kelakuan ini bergantung pada cara fungsi JavaScript dipanggil dan ditakrifkan, bukan hanya bagaimana ia ditakrifkan.
Dalam panggilan console.log() pertama, getFullname() dipanggil sebagai fungsi objek obj.prop. Oleh itu, konteks merujuk kepada yang terakhir dan fungsi mengembalikan nama penuh objek. Sebaliknya, apabila getFullname() diberikan kepada pembolehubah ujian, konteks merujuk kepada objek global (tetingkap). Ini kerana ujian ditetapkan secara tersirat sebagai sifat objek global. Atas sebab ini, fungsi mengembalikan nama penuh tetingkap, iaitu nilai yang ditakrifkan pada baris pertama.
5: panggil() dan mohon()
Sekarang mari kita selesaikan masalah sebelumnya supaya console.log() terakhir mencetak Aurelio De Rosa.
Jawapan
Masalah ini boleh diubah dengan memaksa penggunaan call() atau apply() untuk menukar konteks fungsi. Di bawah saya akan menggunakan call(), tetapi dalam kes ini apply() akan mengeluarkan hasil yang sama: