1.
var name = "The Window"; var object = { name : "My Object", getName: function(){ return this.name; } };
Kaedah getName() di sini hanya mengembalikan nilai this.name. Berikut ialah beberapa cara untuk memanggil object.getName()
kaedah dan keputusan masing-masing.
object.getName(); //"Objek Saya"
(object.getName)(); //"Objek Saya"
(object.getName = object.getName)(); //"Tetingkap", dalam mod tidak ketat
Dalam kes ketiga (object.getName=object.getName);
2.
function outputNumbers(count){ for (var i=0; i < count; i++){ //alert(i); } var i; //重新声明变量 alert(i); //计数 } outputNumbers(5);
Lihat (bagaimanapun, ia melakukan inisialisasi pembolehubah dalam pengisytiharan berikutnya). Fungsi tanpa nama boleh digunakan untuk meniru skop peringkat blok dan mengelakkan masalah ini.
3.
function(){ //这里是块级作用域 }(); //出错!
Pengisytiharan nombor tidak boleh diikuti dengan kurungan. Walau bagaimanapun, ungkapan fungsi boleh diikuti dengan kurungan. Untuk menukar pengisytiharan fungsi kepada ungkapan fungsi,
Cuma tambahkan sepasang kurungan padanya seperti di bawah.
(function(){ //这里是块级作用域 })();
4.
function outputNumbers(count){ (function () { for (var i=0; i < count; i++){ alert(i); } })(); alert(i); //导致一个错误! }
Sebarang pembolehubah yang ditakrifkan dalam fungsi akan dimusnahkan pada akhir pelaksanaan. Oleh itu, pembolehubah i hanya boleh digunakan dalam gelung dan dimusnahkan selepas digunakan.
Kiraan pembolehubah boleh diakses dalam skop peribadi kerana fungsi tanpa nama ini adalah penutupan dan ia boleh mengakses
dalam skop yang mengandungi.
semua pembolehubah.
Secara umumnya, kita harus cuba menambah sedikit pembolehubah dan fungsi pada skop global yang mungkin. Dalam projek
besar yang melibatkan ramai pembangun
Dalam aplikasi, terlalu banyak pembolehubah dan fungsi global boleh menyebabkan konflik penamaan dengan mudah. Dengan mencipta skop peribadi, setiap pembangun boleh
untuk menggunakan pembolehubah anda sendiri tanpa perlu risau tentang mengacaukan skop global. Contohnya:
(function(){ var now = new Date(); if (now.getMonth() == 0 && now.getDate() == 1){ alert("Happy new year!"); } })();
Pengguna memaparkan mesej ucapan Tahun Baru. Pembolehubah kini kini merupakan pembolehubah tempatan dalam fungsi tanpa nama, dan kita tidak perlu berada dalam skop global
Cipta dalam .