Adakah Fungsi Tanpa Nama dengan Sintaks Berbeza Secara Fungsinya Sama Dalam JavaScript?
Dalam JavaScript, kedua-duanya (function() { })() dan ( function() { }()) mungkin kelihatan melakukan tugas yang sama dengan memaparkan "foo" dan "bar" berturut-turut. Walau bagaimanapun, dalam keadaan tertentu, terdapat perbezaan yang ketara antara kedua-dua sintaks ini.
Kod Blok 1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
Kod Blok 2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
Setara Dari segi Fungsi
Jika tiada sebarang pengubahsuaian, kedua-dua blok kod adalah setara dari segi fungsi. Mereka mencipta fungsi tanpa nama, melaksanakannya serta-merta, dan kemudian mengakses pembolehubah bar yang ditakrifkan dalam fungsi tersebut.
Perbezaan dengan Pengubahsuaian
Walau bagaimanapun, jika anda memperkenalkan pengubahsuai sedemikian sebagai baharu sebelum fungsi memanggil atau menambah sesuatu selepasnya, tingkah laku berubah.
Kod Blok 1 dengan baharu dan .prop:
new (function() { this.prop = 4; }) ().prop;
Kod ini mencipta contoh baharu bagi fungsi tanpa nama dan mengakses harta propnya. Ia mengembalikan 4.
Kod Blok 2 dengan baharu dan .Kelas:
new ( function() { return { Class: function() { } }; }() ).Class;
Sebaliknya, kod ini memanggil baharu pada sifat Kelas. Disebabkan kurungan tambahan di dalam kurungan luar, panggilan fungsi bukan sebahagian daripada ungkapan baharu. Ia sebaliknya memanggil fungsi secara normal dan mengembalikan nilai pulangannya, yang merupakan contoh kelas.
Ringkasnya, manakala kedua-dua (function() { })() dan (function() { }()) adalah berfungsi setara dalam keadaan biasa, ia berkelakuan berbeza apabila digabungkan dengan pengubah suai yang mempengaruhi cara ia dilaksanakan.
Atas ialah kandungan terperinci Adakah Fungsi Tanpa Nama dengan Sintaks Berbeza Berkelakuan Berbeza dalam JavaScript Apabila Digabungkan dengan Pengubah Suai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!