Gösterdiğiniz özel durumda, işlevsellik veya görünürlük açısından anlamlı bir fark yoktur.
Orijinal kodlayıcının bu yaklaşımı, aşağıdakiler gibi şeylerin tanımında kullanılabilecek özel değişkenleri tanımlamasına izin veren bir tür şablon olarak benimsemiş olması muhtemeldir myFunction
:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
Bu seconds_per_day
, işlev her çağrıldığında hesaplamayı önler ve aynı zamanda küresel kapsamı kirletmesini önler .
Ancak, esasen bundan farklı hiçbir şey yoktur
var MyObject = function() {
var seconds_per_day = 24 * 60 * 60;
return {
myFunction: function(foo) {
return seconds_per_day;
}
};
}();
Orijinal kodlayıcı root.myFunction = function
, nesnenin nesne / özellik sözdizimi yerine bildirim temelli sözdizimini kullanarak nesneye işlevler eklemeyi tercih etmiş olabilir myFunction: function
. Ancak bu fark esas olarak bir tercih meselesidir.
Bununla birlikte, orijinal kodlayıcı tarafından alınan yapı, özelliklerin / yöntemlerin kodun başka bir yerine kolayca eklenebilmesi avantajına sahiptir:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
(function(root) {
var another_private_variable = Math.pi;
root.myFunction2 = function(bar) { };
})(MyObject);
Sonuç olarak, ihtiyacınız yoksa bu yaklaşımı benimsemenize gerek yoktur, ancak mükemmel bir şekilde çalıştığı ve aslında bazı avantajları olduğu için değiştirmeye de gerek yoktur.