Saat melihat kode sumber template JavaScript, saya menemukan bahwa ada penggunaan yang menarik untuk menghasilkan fungsi. Bukankah ini metaprogramming?
Metaprogramming JavaScript
Salinan kode adalah sebagai berikut:
Metaprogramming mengacu pada penulisan jenis program komputer tertentu yang menulis atau memanipulasi program lain (atau itu sendiri) sebagai data mereka, atau menyelesaikan beberapa pekerjaan yang seharusnya diselesaikan pada waktu kompilasi saat runtime.
JavaScript Eval
Salinan kode adalah sebagai berikut:
Fungsi eval () menghitung string dan menjalankan kode JavaScript di dalamnya.
Mungkin ada penggunaan berikut:
Salinan kode adalah sebagai berikut:
eval ("x = 10; y = 20; document.write (x*y)")
Tentu saja, ini hanya digunakan untuk menjalankan fungsi tertentu, tetapi produk ini lebih murah dan mudah membuat kesalahan.
Salinan kode adalah sebagai berikut:
Fungsi eval harus dihindari sebanyak mungkin.
Jadi cara yang lebih baik adalah dengan menggunakan fungsi baru ()
Perbedaan besar antara menggunakan fungsi baru () dan eval () adalah bahwa eval bukan hanya fungsi.
Salinan kode adalah sebagai berikut:
Eval () menghitung string sebagai ekspresi JavaScript dalam ruang lingkup eksekusi saat ini, memungkinkan akses ke variabel lokal. Function baru () Parses kode javascript yang disimpan dalam string yang dikonversi menjadi objek fungsi dan kemudian dapat dipanggil. Karena kode berjalan dalam ruang lingkup terpisah, variabel lokal tidak dapat diakses.
Dengan kata lain, eval () akan mengganggu ruang lingkup fungsi saat ini. .
JavaScript New Function ()
Konstruktor fungsi membuat objek fungsi baru. Dalam JavaScript, setiap fungsi sebenarnya adalah objek fungsi. Objek fungsi yang dihasilkan menggunakan konstruktor fungsi diuraikan saat fungsi dibuat. Ini kurang efisien daripada menggunakan deklarasi fungsi dan memanggilnya dalam kode Anda, karena fungsi yang dinyatakan menggunakan pernyataan fungsi diuraikan dengan pernyataan lain.
Fungsi baru () tidak efisien dalam perbandingan, yang dapat kita prediksi dalam keadaan saat ini.
Contoh sederhana adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var add = fungsi baru (['x', 'y'], 'return x + y');
fungsi baru () mem -parsing string ke dalam suatu fungsi. . Kemudian kita bisa menjalankannya dengan menerapkannya
Salinan kode adalah sebagai berikut:
Function.apply (null, args)
Dan inilah yang saya lihat di Template JavaScript:
Salinan kode adalah sebagai berikut:
fungsi baru (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
str.replace (tmpl.regexp, tmpl.func) +
"'; return _s;"
);
Tentu saja kami memiliki cara lain.