Kata -kata sebelumnya
Eval dan dengan sering tidak disukai, seolah -olah keberadaannya adalah kesalahan. Dalam CSS, tabel tidak disukai dan hanya menggunakan tabel untuk menampilkan data pada halaman web, bukan tata letak, dapat ditolak sebagai tidak teratur dan terlalu mengoreksi. Jadi apa situasi tentang eval dan dengan? Artikel ini akan memperkenalkan fungsi eval () dan dengan pernyataan secara rinci
evaluasi
definisi
Eval () adalah fungsi global. JavaScript menggunakan eval () untuk menjelaskan string berjalan yang terdiri dari kode sumber JavaScript.
var result = eval ('3+2'); console.log (hasil, tipe hasil); // 5 'angka'penggunaan
Eval () hanya memiliki satu parameter. Jika parameter yang diteruskan bukan string, itu langsung mengembalikan parameter ini. Jika parameternya adalah string, itu akan mengkompilasi string sebagai kode JavaScript. Jika kompilasi gagal, pengecualian kesalahan sintaks (sintakserror) dilemparkan. Jika kompilasi berhasil, kode dieksekusi dan nilai ekspresi atau pernyataan terakhir dalam string dikembalikan, dan jika ekspresi atau pernyataan terakhir tidak memiliki nilai, pada akhirnya akan mengembalikan tidak ditentukan. Jika string melempar pengecualian, pengecualian akan meneruskan panggilan ke eval ()
var num = 1; var str = 'test'; console.log (eval (num)); // 1console.log (eval (str)); // ReferenceError: tes tidak didefinisikan var strlong1 = 'var x = 1; var y = 2;'; console.log (eval (strlong1), x, y);//tidak berbeda. x ++; '; console.log (eval (strlong2), x); // 1 2
Cakupan
Eval () menggunakan lingkungan lingkup variabel yang menyebutnya. Artinya, ia mencari nilai variabel dan mendefinisikan pengoperasian variabel dan fungsi baru dan kode dalam ruang lingkup lokal.
var b = 2; fungsi foo (str, a) {eval (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Alias
Ketika dipanggil melalui alias, eval () akan menjalankan stringnya sebagai kode global tingkat atas. Kode yang dieksekusi dapat mendefinisikan variabel global baru dan fungsi global, atau menetapkan nilai ke variabel global, tetapi tidak dapat menggunakan atau memodifikasi variabel lokal dalam fungsi.
var geval = eval; var x = 'global', y = 'global'; Fungsi f () {var x = 'local'; eval ('x += "diubah";'); return x;} fungsi g () {var y = 'local'; geval ('y += "diubah";'); return y;} konsol.log (f (), x); // localchanged globalconsole.log () (), yo);[Catatan] IE8-The Browser Calls eval () melalui alias dan panggilan eval () biasanya hasil yang sama.
efek samping
Interpreter JavaScript melakukan banyak analisis dan optimasi kode. Masalah dengan eval () adalah bahwa kode yang digunakan untuk eksekusi dinamis biasanya tidak dianalisis, sehingga penerjemah tidak dapat mengoptimalkannya, yang akan menyebabkan degradasi kinerja
Mirip dengan eval () adalah setTimeout (), setInterval (), Function baru (), dll. Fungsi -fungsi ini dapat dieksekusi secara dinamis ketika program dijalankan menggunakan string sebagai parameter. Manfaat dari mekanisme eksekusi ini tidak dapat mengimbangi kerugian kinerjanya, jadi Anda harus mencoba menghindari menggunakannya.
Mode ketat
Karena fungsi eval () terlalu kuat, mode ketat secara ketat membatasi itu
【1】 Variabel atau fungsi tidak dapat dibuat melalui fungsi eval (), tetapi nilainya dapat ditanya dan diubah
'Gunakan ketat'; eval ('var x = 1;'); console.log (x); // ReferenceError: x tidak didefinisikan dengan ketat '; var x = 1; eval (' x = 2; '); console.log (x); // 2【2】 Tidak dapat menggunakan eval sebagai pengidentifikasi
'Gunakan ketat'; var eval = 10; // sintakserror: eval atau argumen yang tidak terduga dalam mode ketat
dengan
Tujuan mendefinisikan dengan pernyataan adalah untuk menyederhanakan pekerjaan menulis objek yang sama beberapa kali.
Pernyataan dengan menambah objek pada kepala rantai lingkup, kemudian menjalankan pernyataan, dan akhirnya mengembalikan rantai lingkup ke keadaan aslinya.
dengan (objek) {pernyataan;}memengaruhi
Ketika level bersarang objek dalam, dengan pernyataan biasanya digunakan untuk menyederhanakan penulisan kode. Intinya, ia diproses dengan memperlakukan referensi objek sebagai ruang lingkup dan menggunakan atribut objek sebagai pengidentifikasi dalam ruang lingkup, sehingga menciptakan ruang lingkup leksikal baru
Di JavaScript klien, ekspresi seperti berikut ini dapat digunakan untuk mengakses elemen dalam formulir HTML
Document.Forms [0] .Address.Value
Jika ekspresi seperti itu muncul beberapa kali dalam kode, Anda dapat menggunakan pernyataan dengan untuk menambahkan objek formulir ke tingkat atas rantai lingkup
dengan (document.forms [0]) {name.value = ''; address.value = ''; emai.value = '';}Metode ini mengurangi banyak input tanpa harus awalan dokumen. Bentuk [0] untuk setiap nama properti. Objek ini dipasang sementara pada rantai lingkup. Ketika JavaScript perlu mengurai pengidentifikasi seperti alamat, itu akan secara otomatis mencari di objek ini.
[Catatan] Pernyataan dengan menyediakan jalan pintas untuk membaca properti suatu objek, tetapi tidak dapat membuat properti dari suatu objek
Jika objek o memiliki atribut x, maka kode berikut menetapkan nilai atribut ke 1
var o = {x: 0}; dengan (o) x = 1; console.log (ox); // 1Jika tidak ada atribut x yang didefinisikan dalam O, kode berikut persis sama dengan kode x = 1 yang tidak menggunakan pernyataan dengan dengan dengan. Ini karena kueri LHS dilakukan pada variabel x dan 1 ditugaskan untuk itu
var o = {}; dengan (o) x = 1; console.log (ox); // undefinedconsole.log (x); // 1efek samping
Mirip dengan eval, kode javascript dari pernyataan dengan sangat sulit untuk dioptimalkan, dan juga menyebabkan kesulitan dalam men -debug kode. Ini lebih lambat dari kode yang tidak menggunakan pernyataan dengan dengan.
Selain itu, jika pernyataan dengan tidak pantas, dapat menyebabkan kebocoran variabel dan mencemari ruang lingkup global.
var x = 1; var o = {}; dengan (o) {x = 2;} console.log (x); // 2console.log (ox); // tidak terdefinisiMode ketat
Dalam mode ketat, penggunaan dengan pernyataan dilarang
// Sintakserror: Kode mode ketat mungkin tidak termasuk A dengan pernyataan yang ketat '; var o = {}; dengan (o) {x = 2;}akhirnya
Menggunakan eval dan dengan membuat mustahil bagi mesin untuk mengoptimalkan pencarian ruang lingkup pada waktu kompilasi, menghasilkan degradasi kinerja dan berjalan lebih lambat. Karena eval dan dengan jarang digunakan dalam pekerjaan aktual, pembatasan di bawah mode ketat memiliki dampak kecil pada kita. Sama seperti Kementerian Luar Negeri mengeluarkan pengumuman suatu hari bahwa negara kita tidak akan lagi mengeluarkan visa ke Jamaika. Meskipun kami telah mendengar tentang Jamaika, kebanyakan orang mungkin tidak pergi ke sana sekali dalam hidup mereka, jadi itu tidak masalah. Demikian pula, tidak masalah apakah eval dan dengan tidak disukai atau tidak
Di atas adalah penjelasan terperinci dari ringkasan pembelajaran JavaScript yang diperkenalkan kepada editor kepada Anda tentang fungsi eval yang dibenci dan dengan contoh pernyataan. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!