Rumah >hujung hadapan web >tutorial js >Mengapa Tanda Kurung Mencipta Fungsi Tanpa Nama Terkapsul dalam JavaScript?

Mengapa Tanda Kurung Mencipta Fungsi Tanpa Nama Terkapsul dalam JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 10:41:11371semak imbas

Why Do Parentheses Create Encapsulated Anonymous Functions in JavaScript?

Sintaks Fungsi Tanpa Nama Terkapsul

Dalam JavaScript, fungsi tanpa nama terkapsul dicipta dengan membungkus fungsi dalam kurungan dan melaksanakannya dengan segera:

(function(){
    // code here
})();

Sintaks ini digunakan untuk mengelakkan kekacauan skop global dengan pembolehubah dan fungsi.

Mengapa Ini Berfungsi: (function(){})();

Apabila tanda kurung mengelilingi pengisytiharan fungsi, hasilnya ialah dinilai sebagai ungkapan fungsi. Ungkapan fungsi membenarkan nama pilihan, jadi ungkapan ini boleh dijalankan tanpa nama.

Mengapa Ini Tidak Berfungsi: function(){}();

Hidup sebaliknya, apabila tiada kurungan, JavaScript menghuraikannya sebagai pengisytiharan fungsi. Pengisytiharan fungsi memerlukan pengecam nama, yang tiada dalam kes ini.

Pengisytiharan Fungsi lwn. Ungkapan

  • Pengisytiharan fungsi: pengecam fungsi(parameter) { . .. }
  • Ungkapan fungsi: (pengecam fungsi(parameter) { ... })

Ungkapan fungsi boleh dinamakan atau tidak dinamakan, manakala pengisytiharan fungsi mesti mempunyai nama.

Kurungan dan Konteks

Kurungan menunjukkan bahawa kod yang disertakan adalah ungkapan. Sama ada ia pengisytiharan fungsi atau ungkapan bergantung pada konteks. Pengisytiharan fungsi boleh muncul dalam skop global atau dalam badan fungsi lain, manakala ungkapan fungsi hanya boleh muncul dalam ungkapan.

Kekaburan Contoh

0, function foo() {} // Function Expression
function foo() {} // Function Declaration

Dalam contoh ini , penghurai menentukan sama ada ia pengisytiharan fungsi atau ungkapan berdasarkan konteks. Ungkapan boleh muncul dalam ungkapan, manakala pengisytiharan hanya boleh muncul di lokasi tertentu.

Mengapa Fungsi dalam Blok Perlu Dielakkan

Fungsi di dalam blok boleh membawa kepada tingkah laku yang tidak dijangka disebabkan isu skop berubah-ubah. Contohnya:

if (true) {
  function foo() {
    alert('true');
  }
} else {
  function foo() {
    alert('false!');
  }
}

foo(); // true? false? why?

Atas ialah kandungan terperinci Mengapa Tanda Kurung Mencipta Fungsi Tanpa Nama Terkapsul dalam JavaScript?. 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