Saya akan mengusulkan jalur ketiga, untuk menempatkan kedua fungsi dalam penutupan. Itu akan terlihat seperti:
var functionA = (function(){
function functionB() {
// do stuff...
}
function functionA() {
// do stuff...
functionB();
// do stuff...
}
return functionA;
})();
Kami membuat penutupan dengan membungkus deklarasi kedua fungsi dalam IIFE . Nilai pengembalian IIFE adalah fungsi publik, disimpan dalam variabel nama untuk fungsi tersebut. Fungsi publik dapat dipanggil dengan cara yang persis sama seolah-olah dinyatakan sebagai fungsi global, yaitu functionA()
. Perhatikan bahwa nilai kembali adalah fungsi , bukan panggilan ke fungsi, sehingga tidak ada paren pada akhirnya.
Dengan membungkus kedua fungsi seperti itu, functionB
sekarang benar-benar pribadi, dan tidak dapat diakses di luar penutupan, tetapi hanya dapat dilihat oleh functionA
. Ini tidak mengacaukan namespace global, dan tidak mengacaukan definisi functionA
.