Rumah > hujung hadapan web > tutorial js > js melaksanakan fungsi dengan segera: Apakah perbezaan antara (fungsi ( ){})( ) dan (fungsi ( ){}( ))?_kemahiran javascript

js melaksanakan fungsi dengan segera: Apakah perbezaan antara (fungsi ( ){})( ) dan (fungsi ( ){}( ))?_kemahiran javascript

WBOY
Lepaskan: 2016-05-16 15:31:19
asal
1055 orang telah melayarinya

Tiada perbezaan.

Anda perlu memahami prinsip IIFE, izinkan saya menerangkan secara ringkas:

Salin kod Kod adalah seperti berikut:

function foo() {...} // Ini ialah takrifan, Deklarasi; takrifan hanya membolehkan penterjemah tahu bahawa ia wujud, tetapi ia tidak akan dijalankan.
foo(); // Ini adalah pernyataan, Pernyataan; penterjemah akan menjalankannya apabila ia menemui pernyataan.

IIFE tidak diperlukan untuk menjadi lebih tradisional, anda boleh menulisnya seperti ini:

Salin kod Kod adalah seperti berikut:

fungsi foo() {...}
foo();

Jadi kenapa IIFE?
1. Kaedah tradisional adalah rumit, dan definisi dan pelaksanaan ditulis secara berasingan; 2. Kaedah tradisional secara langsung mencemarkan ruang nama global (objek global dalam penyemak imbas, seperti tetingkap)

Jadi, pembangun ingin mencari jalan untuk menyelesaikan masalah di atas. Jadi bolehkah menulis begini?

fungsi foo(...){}();

Sudah tentu tidak, tetapi mengapa? Oleh kerana bahagian fungsi foo(...){} hanyalah pernyataan, kepada penterjemah, ia seperti anda menulis rentetan "function foo(...){}", yang memerlukan penggunaan fungsi penghuraian, seperti eval () untuk melaksanakannya. Jadi meletakkan () terus selepas pernyataan tidak akan dilaksanakan, yang merupakan sintaks yang salah.

Bagaimana untuk membuatnya betul? Senang cakap, cuma tukar pernyataan itu menjadi ungkapan (Ekspresi).

Sebenarnya, terdapat banyak cara untuk mengubah ungkapan Cara yang paling biasa ialah membungkus pengisytiharan fungsi dengan sepasang (), jadi ia menjadi:

Salin kod Kod adalah seperti berikut:
(function foo() {...}) // Ini adalah pemisah baris yang disengajakan, dan ia sebenarnya boleh disambungkan dengan kurungan berikut
();

Ini bersamaan dengan:


Salin kod Kod adalah seperti berikut:
var foo = function () {...}; // Ini bukan takrifan, tetapi ungkapan.
foo();

Tetapi cara yang kami katakan adalah mustahil untuk menulis sebelum ini sebenarnya boleh dibalut terus dalam kurungan Ini juga merupakan ungkapan yang setara:

(fungsi foo(){...}());

Jadi anda bertanya, adakah terdapat perbezaan? Sangat mudah: Tidak~

Selain itu, seperti yang saya katakan terdapat banyak cara untuk mengubah ekspresi, sememangnya terdapat banyak cara lain untuk menulisnya, seperti:

!function foo() {...}();

atau

fungsi foo() {...}();

Ini semua baik-baik saja.

Saya secara peribadi lebih suka menggunakan void untuk menukar ungkapan, kerana kata kunci ini tidak mempunyai nilai pulangan. Tetapi perkara ini sebenarnya tidak penting, cuma layan saya sebagai "kura-kura"...

Salin kod Kod adalah seperti berikut:
fungsi lompang () {
//Ini adalah kod yang anda perlukan
}();

OK, apa yang dipanggil tidak mencemarkan ruang nama global adalah kerana IIFE mencipta skop fungsi baharu dan kod perniagaan sebenar anda terkandung di dalamnya, jadi ia secara semula jadi tidak akan menyentuh objek global. Jika anda memerlukan objek global, hantar ke IIFE:

Salin kod Kod adalah seperti berikut:
fungsi lompang (global) {
//Di sini, global ialah objek global
}(this) // Dalam penyemak imbas, ini ialah objek tetingkap

Saya telah menulis satu siri di sini, salah satunya membincangkan tentang skop dan promosi penamaan di dalamnya membantu untuk memahami IIFE Jika anda berminat, anda boleh terus membaca secara mendalam: http://. www.jb51 .net/article/75090.htm

Kaedah pertama, panggil fungsi dan dapatkan nilai pulangan. Memaksa fungsi untuk dilaksanakan secara langsung dan kemudian mengembalikan rujukan, yang kemudiannya dipanggil dan dilaksanakan
Kaedah kedua, panggil fungsi dan dapatkan nilai pulangan. Pengendali paksaan menyebabkan panggilan fungsi untuk melaksanakan
(function(){})(); adalah untuk menghuraikan fungsi sebagai ungkapan dan kemudian melaksanakan fungsi yang dihuraikan
Bersamaan dengan var a = function(){}; a mendapat fungsi
(function(){}()); adalah untuk melaksanakan secara langsung ungkapan fungsi dan pelaksanaan sebagai pernyataan,
Bersamaan dengan var a = function(){}(); a mendapat hasil
Hasil akhirnya adalah sama,
() hanya memainkan peranan melaksanakan diri
Terdapat banyak lagi seperti ()
Contohnya fungsi (){}
Ini bersamaan dengan (fungsi (){} Secara umumnya, (fungsi (){}) mempunyai kesan lain, iaitu untuk mengelakkan pembolehubah global

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan