Rumah  >  Artikel  >  hujung hadapan web  >  Adakah Fungsi Tanpa Nama dengan Sintaks Berbeza Berkelakuan Berbeza dalam JavaScript Apabila Digabungkan dengan Pengubah Suai?

Adakah Fungsi Tanpa Nama dengan Sintaks Berbeza Berkelakuan Berbeza dalam JavaScript Apabila Digabungkan dengan Pengubah Suai?

Susan Sarandon
Susan Sarandonasal
2024-10-30 15:17:02850semak imbas

Do Anonymous Functions with Different Syntax Behave Differently in JavaScript When Combined with Modifiers?

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!

Kenyataan:
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