Rumah > hujung hadapan web > tutorial js > Adakah \'(fungsi () { } ) ( )\' dan \'(fungsi () { } ( ) )\' Sama Fungsi dalam JavaScript?

Adakah \'(fungsi () { } ) ( )\' dan \'(fungsi () { } ( ) )\' Sama Fungsi dalam JavaScript?

Linda Hamilton
Lepaskan: 2024-10-30 07:29:03
asal
765 orang telah melayarinya

Are

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);
Salin selepas log masuk
(function()
{
    bar = 'bar';
    alert('foo');
}());

alert(bar);
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

Kod 2:

new ( function() {
    return { Class: function() { } }; 
}() ).Class;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan