당신이 보여주는 특별한 경우에는 기능이나 가시성 측면에서 의미있는 차이가 없습니다.
원래 코더는이 접근 방식을 일종의 템플릿으로 채택하여 다음과 같은 정의에 사용할 수있는 개인 변수를 정의 할 수 있습니다 myFunction
.
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
이렇게하면 seconds_per_day
함수가 호출 될 때마다 계산을 피하고 전역 범위를 오염시키지 않습니다.
그러나 본질적으로 그와 다른 것은 없습니다.
var MyObject = function() {
var seconds_per_day = 24 * 60 * 60;
return {
myFunction: function(foo) {
return seconds_per_day;
}
};
}();
원래 코더는 root.myFunction = function
의 개체 / 속성 구문 대신 의 선언적 구문을 사용하여 개체에 함수를 추가 할 수있는 것을 선호했을 수 있습니다 myFunction: function
. 그러나 그 차이는 주로 선호도의 문제입니다.
그러나 원래 코더가 취한 구조는 속성 / 메소드를 코드의 다른 곳에 쉽게 추가 할 수 있다는 이점이 있습니다.
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);
요컨대, 필요하지 않은 경우이 접근 방식을 채택 할 필요가 없지만 완벽하게 잘 작동하고 실제로 몇 가지 장점이 있기 때문에 변경할 필요도 없습니다.