Rumah  >  Artikel  >  hujung hadapan web  >  5 soalan temu bual JavaScript klasik_kemahiran javascript

5 soalan temu bual JavaScript klasik_kemahiran javascript

WBOY
WBOYasal
2016-05-16 16:34:141404semak imbas

1: Skop

Salin kod Kod adalah seperti berikut:

(fungsi() {
var a = b = 5;
})();
console.log(b);

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:

Salin kod Kod adalah seperti berikut:

(fungsi() {
'gunakan ketat';
var a = window.b = 5;
})();

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:

Salin kod Kod adalah seperti berikut:

console.log('hello'.repeatify(3));

harus mencetak hellohellohello.

Jawapan

Pelaksanaan yang mungkin kelihatan seperti ini:

Salin kod Kod adalah seperti berikut:

String.prototype.repeatify = String.prototype.repeatify || var str = '';
untuk (var i = 0; i < kali; i ) {
       str = ini;
}
Kembali str;
};

Soalan semasa menguji pengetahuan pembangun tentang pewarisan dan prototaip JavaScript. Ini juga mengesahkan bahawa pembangun tahu cara memanjangkan objek terbina dalam (walaupun ini tidak sepatutnya dilakukan).

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:

Salin kod Kod adalah seperti berikut:
String.prototype.repeatify = String.prototype.repeatify ||. fungsi(kali) {/* kod di sini */};

Teknik ini amat berguna apabila anda diminta untuk menjadikan fungsi JavaScript serasi.

3: Penyata Menaik

Laksanakan kod ini dan hasil yang akan dikeluarkan.


Salin kod Kod adalah seperti berikut:
ujian fungsi() {
console.log(a);
console.log(foo());
var a = 1;
Fungsi foo() {
Kembali 2;
}
}
10: ujian();


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:


Salin kod Kod adalah seperti berikut:
ujian fungsi() {
var a;
Fungsi foo() {
Kembali 2;
}
console.log(a);

console.log(foo());

a = 1;

}

ujian();


4: Bagaimana ini berfungsi dalam JavaScript

Apakah yang akan dikeluarkan oleh kod berikut? Berikan jawapan anda.

Salin kod Kod adalah seperti berikut:

var nama penuh = 'John Doe';
var obj = {
Nama penuh: 'Colin Ihrig',
; prop: {
        nama penuh: 'Aurelio De Rosa',
        getFullname: function() {
            kembalikan ini.nama penuh;
}
}
};

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:

Salin kod Kod adalah seperti berikut:

console.log(test.call(obj.prop));
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn