Objek fungsi dalam JS adalah hal yang menarik, tetapi sering membingungkan karena terlalu fleksibel.
Izinkan saya menunjukkan cuplikan kode terlebih dahulu.
var scope = "global"; function constructFunction () {var scope = "local"; return function baru ("return scope");} constructFunction () () (); function constructFunction2 () {var scope = "local"; return function () {return scope;}} constructFunction2 () ();Apa perasaan pertama Anda saat Anda melihat keduanya? Semua mengembalikan "lokal"? ? Jika ini masalahnya, Anda perlu melihat lebih dekat penjelasan di bawah ini. ConstructFunction2 () harus mudah dipahami penutupan, dan saya tidak akan membahas detail di sini. Selanjutnya, saya akan fokus pada situasi ConstructFunction ().
Konstruktor fungsi () digunakan di sini. Meskipun fungsi () konstruktor tidak terlalu umum digunakan, masih perlu untuk memahaminya.
Apakah itu pernyataan definisi fungsi atau ekspresi kuantitatif langsung fungsi, definisi fungsi harus menggunakan kata kunci fungsi (). Fungsi tunggal juga dapat didefinisikan oleh konstruktor fungsi (), seperti:
var f = fungsi baru ("x", "y", "return x*y");Efek aktual dari baris ini setara dengan baris kode berikut.
var f = function (x, y) {x*y};Konstruktor fungsi () dapat melewati sejumlah argumen string, dan teks yang diwakili oleh argumen terakhir adalah badan fungsi; Ini dapat berisi pernyataan JavaScript apa pun, dan setiap pernyataan dibagi dengan titik koma. Semua string argumen lain yang diteruskan ke konstruktor adalah string yang menentukan nama fungsi. Jika fungsi yang ditentukan tidak berisi parameter apa pun, cukup berikan bodi fungsi string ke konstruktor.
Ada beberapa poin untuk memberi perhatian khusus pada konstruktor fungsi ():
1. Fungsi () Konstruktor memungkinkan JavaScript untuk membuat dan mengkompilasi fungsi secara dinamis saat runtime.
2. Setiap kali konstruktor fungsi () dipanggil, badan fungsi akan diuraikan dan objek fungsi baru akan dibuat. Jika konstruktor ini dieksekusi dalam loop atau beberapa panggilan, efisiensi eksekusi akan terpengaruh. Sebaliknya, fungsi bersarang dan ekspresi definisi fungsi dalam loop tidak dikompilasi ulang setiap kali mereka dieksekusi.
2. Poin terakhir juga merupakan poin yang sangat penting tentang konstruktor fungsi (), yaitu fungsi yang dibuatnya tidak menggunakan ruang lingkup leksikal. Sebaliknya, kompilasi kode tubuh fungsi akan selalu dieksekusi pada fungsi tingkat atas. Setelah membaca ini, fungsi di atas constructFunction () () (); Seharusnya mudah dimengerti untuk mengembalikan "global"?
Di atas adalah konstruktor fungsi JS () yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!