Rumah > Artikel > hujung hadapan web > Adakah \"(fungsi () { } ) ( )\" dan \"(fungsi () { } ( ) )\" Sama Fungsi dalam JavaScript?
Sintaks Invokasi Fungsi dalam JavaScript: Adakah "(fungsi ( ) { } ) ( )" dan "(fungsi ( ) { } ( ) )" Sama Fungsi?
Soalan:
Pertimbangkan dua blok kod JavaScript berikut:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
Kedua-dua blok kod melaksanakan amaran('foo' ) dan kemudian alert(bar), memaparkan 'foo' dan 'bar' masing-masing. Satu-satunya perbezaan antara keduanya ialah sintaks penyeruan fungsi. Adakah fungsinya sama?
Jawapan:
Ya, secara amnya, kedua-dua blok kod adalah setara dari segi fungsi. Kedua-duanya akan mentakrifkan fungsi baharu, melaksanakannya dengan serta-merta, dan kemudian mengakses pembolehubah bar dalam skop global.
Pengecualian:
Walau bagaimanapun, terdapat kes kelebihan di mana kedua-dua sintaks mungkin berkelakuan berbeza. Khususnya, jika anda memperkenalkan kod baharu sama ada sebelum fungsi atau selepas .sesuatu dalam fungsi, ia tidak akan berkelakuan sama.
Kod 1:
new (function() { this.prop = 4; }) ().prop;
Kod ini mencipta tika baharu kelas fungsi dan mendapatkan semula sifat prop tika baharu, mengembalikan 4. Ia bersamaan dengan:
function MyClass() { this.prop = 4; } new MyClass().prop;
Kod 2:
new ( function() { return { Class: function() { } }; }() ).Class;
Kod ini dipanggil baharu pada sifat Kelas. Memandangkan kurungan untuk panggilan fungsi berada dalam kurungan luar, ia tidak mencetuskan ungkapan baharu dan sebaliknya memanggil fungsi secara normal, mengembalikan nilai pulangannya. Ungkapan baharu membuat instantiat sehingga .Class dan membuat instantiat itu. Ia bersamaan dengan:
var namespace = { Class: function() { } }; function getNamespace() { return namespace; } new ( getNamespace() ).Class; //Or, new namespace.Class;
Tanpa kurungan di sekeliling panggilan untuk getNamespace(), kod ini akan dihuraikan sebagai (new getNamespace()).Kelas, membuat instantiating kelas getNamespace dan mengembalikan sifat Kelas bagi contoh baharu.
Atas ialah kandungan terperinci Adakah \"(fungsi () { } ) ( )\" dan \"(fungsi () { } ( ) )\" Sama Fungsi dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!