Saya menemukan artikel ini yang menjelaskan kuis JavaScript. Ngomong -ngomong, tidak apa -apa, jadi saya ingin membawanya ke sini agar semua orang belajar, memahami, membaca, dan mengkritik.
Pertanyaan 1
(function () {return typeof argumen; // "objek"}) ();Argumen adalah objek seperti array, yang sesuai dengan daftar parameter fungsi yang dilewati. Anda dapat menggunakan variabel ini secara langsung dalam fungsi apa pun.
Operator TypeOF hanya akan mengembalikan hasil string tipe. Lihat daftar berikut untuk mengetahui nilai apa yang dikembalikan oleh TypeOf adalah data yang berbeda:
Dari sini kami menyimpulkan bahwa tipe argumen adalah objek
Pertanyaan 2
var f = fungsi g () {return 23; }; typeof g (); // Laporkan kesalahanIni adalah ekspresi fungsi dengan nama g, dan kemudian ditugaskan ke variabel f.
Nama fungsi g di sini dan variabel f yang ditetapkan olehnya memiliki perbedaan berikut:
Nama fungsi g tidak dapat diubah, sedangkan variabel f dapat dipindahkan
Nama fungsi g hanya dapat digunakan di dalam tubuh fungsi. Jika Anda mencoba menggunakan G di luar fungsi, kesalahan akan dilaporkan.
Pertanyaan 3
(function (x) {hapus x; return x; // 1}) (1);Operator Hapus dapat menghapus atribut dari suatu objek, dan penggunaan yang benar adalah sebagai berikut:
Hapus objek.property
Hapus objek ['properti']
Operator Hapus hanya dapat digunakan pada properti objek dan tidak valid untuk variabel dan nama fungsi. Artinya, hapus x tidak ada artinya.
Anda sebaiknya tahu bahwa Delete tidak akan melepaskan memori secara langsung, itu secara tidak langsung mengganggu referensi objek
Pertanyaan 4
var y = 1, x = y = typeof x; x; // "tidak terdefinisi"
Kami mencoba memecah kode di atas menjadi dua langkah berikut:
var y = 1; // Langkah 1
var x = y = typeof x; // Langkah 2
Seharusnya tidak ada keberatan dengan langkah pertama, mari kita lihat langkah kedua secara langsung
1. Ekspresi penugasan dieksekusi dari kanan ke kiri
2. Hasil Y dipindahkan ke TypeOf X, yaitu, tidak terdefinisi
3.x ditugaskan sebagai hasil dari ekspresi yang tepat (y = tipe x), yaitu, tidak ditentukan
Pertanyaan 5
(fungsi f (f) {return typeof f (); // "number"}) (function () {return 1;});Penjelasan Komentar Langsung:
(fungsi f (f) {// f di sini adalah parameter yang dilewati dalam fungsi () {return 1;} // hasil eksekusi secara alami 1 tipe pengembalian f (); // demikian menurut tabel dalam pertanyaan satu, kita tahu bahwa tipe 1 hasil adalah "angka"}) (function () {return 1;});Pertanyaan 6
var foo = {bar: function () {return this.baz; }, baz: 1}; (function () {return typeof argumen [0] (); // "tidak terdefinisi"}) (foo.bar);Di sini Anda mungkin secara keliru berpikir bahwa hasil akhirnya adalah angka. Meneruskan parameter ke suatu fungsi dapat dianggap sebagai tugas, jadi argumen [0] mendapatkan nilai fungsi batang nyata, daripada referensi ke foo.bar, jadi tentu saja ini tidak akan menunjuk ke foo, tetapi jendela.
Pertanyaan 7
var foo = {bar: function () {return this.baz; }, baz: 1} typeof (f = foo.bar) (); // "tidak ditentukan"Ini adalah masalah yang sama dengan pertanyaan sebelumnya. (f = foo.bar) Mengembalikan nilai batang, bukan rujukannya, jadi ini tidak merujuk pada foo.
Pertanyaan 8
var f = (fungsi f () {return '1';}, function g () {return 2;}) (); typeof f; // "angka"Operator koma mengevaluasi masing -masing objek operasinya (dari kiri ke kanan) dan mengembalikan nilai objek operasi terakhir.
Jadi nilai pengembalian (fungsi f () {return '1';}, fungsi g () {return 2;}) adalah fungsi g, dan kemudian jalankan, maka hasilnya adalah 2; Akhirnya Typeof 2, menurut tabel dalam pertanyaan satu, hasilnya secara alami angka
Pertanyaan 9
var x = 1; if (function f () {}) {x += typeof f;} x; // "1undefined"Poin kunci dari masalah ini, kami sebutkan dalam pertanyaan 2, nama fungsi F dalam ekspresi fungsi tidak dapat diakses di luar badan fungsi.
Pertanyaan 10
var x = [typeof x, typeof y] [1]; typeof typeof x; // "string" 1. Karena variabel y belum dinyatakan, tipe y mengembalikan "tidak terdefinisi"
2. Tetapkan hasil tipe y ke x, yaitu x sekarang "tidak ditentukan"
3. Kemudian typeof x tentu saja "string"
4. Hasil akhir dari tipe "string" secara alami masih "string"
Pertanyaan 11
(function (foo) {return typeof foo.bar; // "tidak terdefinisi"}) ({foo: {bar: 1}});Ini adalah trik visual murni, komentar
(function (foo) {// foo di sini adalah {foo: {bar: 1}}, dan tidak ada atribut batang. // atribut bar di bawah foo.foo//so hasilnya di sini adalah "tidak terdefinisi" typeof foo.bar;}) ({foo: {bar: 1}});Pertanyaan 12
(fungsi f () {function f () {return 1;} return f (); // 2 function f () {return 2;}}) ();Fungsi dinyatakan melalui deklarasi fungsi bahkan dapat digunakan sebelum deklarasi, yang kami sebut fitur ini mengangkat. Jadi kode di atas sebenarnya dijelaskan oleh lingkungan yang berjalan seperti ini:
(function f () {function f () {return 1;} function f () {return 2;} return f ();}) ();Pertanyaan 13
fungsi f () {return f; } baru f () instanceof f; // falseKetika kode baru f () dijalankan, berikut ini akan terjadi:
1. Objek baru dibuat. Itu mewarisi dari f.prototype
2. Konstruktor F dieksekusi. Selama eksekusi, pass yang sesuai akan diteruskan, dan konteks (ini) akan ditentukan sebagai instance baru ini. F baru setara dengan f () baru dan hanya dapat digunakan dalam kasus di mana tidak ada parameter yang dilewati.
3. Jika konstruktor mengembalikan "objek", maka objek ini akan menggantikan hasil yang baru. Jika konstruktor tidak mengembalikan objek, hasil baru adalah objek yang dibuat pada langkah 1.
PS: Dalam keadaan normal, konstruktor tidak mengembalikan nilai apa pun, tetapi jika pengguna ingin menimpa nilai pengembalian ini, ia dapat memilih untuk mengembalikan objek normal untuk menimpanya. Tentu saja, array yang kembali juga akan ditimpa, karena array juga merupakan objek.
Oleh karena itu, f () baru kami di sini masih mengembalikan fungsi f itu sendiri, bukan contohnya
Pertanyaan 14
dengan (fungsi (x, tidak terdefinisi) {}) panjang; // 2
Pernyataan dengan menambahkan objek ke bagian atas rantai lingkup. Jika ada variabel yang belum menggunakan namespace dalam pernyataan, yang memiliki nama yang sama dengan properti dalam rantai lingkup, variabel akan menunjuk ke nilai properti. Jika ada properti dengan nama yang sama, pengecualian referensi akan dikeluarkan.
OK, sekarang mari kita lihat, karena fungsi (x, tidak terdefinisi) {} adalah ekspresi fungsi anonim, yang merupakan fungsi, akan memiliki atribut panjang, yang mengacu pada jumlah parameter fungsi. Jadi hasil akhirnya adalah 2
Ditulis di akhir
Beberapa orang berpikir pertanyaan -pertanyaan ini rumit, sementara yang lain berpikir itu memperluas wawasan mereka dan tergantung pada pendapat mereka sendiri. Tapi satu hal itu benar. Apakah Anda seorang praktisi yang kuat atau tidak, Anda pasti tidak akan pergi jauh tanpa landasan teoretis - Anda tidak akan pernah melihat pekerja teknis yang terampil tiba -tiba menjadi ahli roket.
Membaca dokumen, standar membaca, dan menggabungkan praktik adalah cara yang menentukan bagi kawan -kawan.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.