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
DDDasal
2024-11-02 20:33:31565semak imbas

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>

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>

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>

Senario 2:

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

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>

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!

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