Rumah > hujung hadapan web > tutorial js > Adakah Tanda Kurung dalam Panggilan dan Penutupan Fungsi JavaScript Sentiasa Hanya Gula Sintaktik?

Adakah Tanda Kurung dalam Panggilan dan Penutupan Fungsi JavaScript Sentiasa Hanya Gula Sintaktik?

DDD
Lepaskan: 2024-11-02 20:33:31
asal
531 orang telah melayarinya

Are Parentheses in JavaScript Function Calls and Closures Always Just Syntactic Sugar?

Adakah Penutupan Ungkapan dan Panggilan Fungsi Sama dalam JavaScript?

Dalam JavaScript, coretan kod berikut kelihatan menghasilkan output yang sama:

<code class="js">(function() {
    bar = 'bar';
    alert('foo');
})();

(function() {
    bar = 'bar';
    alert('foo');
}());</code>
Salin selepas log masuk

Kedua-dua blok melaksanakan pernyataan amaran('foo') dan mengisytiharkan bar pembolehubah boleh diakses di luar penutupan. Satu-satunya perbezaan yang ketara terletak pada sintaks penutupan, menggunakan )()} berbanding }());.

Adakah binaan ini setara dengan fungsinya?

Jawapan : Ya, mereka adalah sama.

Pertimbangan Tambahan:

Jika kurungan tambahan diperkenalkan, tingkah laku berubah. Pertimbangkan senario berikut:

Senario 1:

<code class="js">new (function() {
    this.prop = 4;
})().prop;</code>
Salin selepas log masuk

Ungkapan ini mencipta tika baharu kelas fungsi dan mengakses sifat prop bagi tika baharu, mengembalikan nilai 4. Ia bersamaan dengan:

<code class="js">function MyClass() {
    this.prop = 4;
}

new MyClass().prop;</code>
Salin selepas log masuk

Senario 2:

<code class="js">new ( function() {
    return { Class: function() { } }; 
}() ).Class;</code>
Salin selepas log masuk

Dalam kes ini, ungkapan baharu menunjukkan sifat Kelas bagi fungsi nilai pulangan. Tanda kurung di sekeliling panggilan fungsi adalah penting, menunjukkan bahawa fungsi itu harus digunakan dengan segera.

Ini bersamaan dengan:

<code class="js">var namespace = { Class: function() { } };

function getNamespace() { return namespace; }

new ( getNamespace() ).Class;
// Or,
new namespace.Class;</code>
Salin selepas log masuk

Jika tanda kurung dialih keluar daripada panggilan untuk getNamespace() , ungkapan itu akan menjadikan kelas getNamespace dan mengakses sifat Kelas bagi tika baharu.

Atas ialah kandungan terperinci Adakah Tanda Kurung dalam Panggilan dan Penutupan Fungsi JavaScript Sentiasa Hanya Gula Sintaktik?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan