2011-08-25 2 views
3

저는 최근에 많은 JavaScript 코드를 조사해 왔으며 IIFE의 "공용"속성을 할당하는 두 가지 다른 방법을 보았습니다.IIFE의 공용 멤버를 변수에 대입하는 것과 객체를 반환하는 것의 차이점

제 정도로 같은 인생의 내부 속성에 해당 변수 변수를 생성하고 할당하는 것이다

var public1; 

(function(){ 
    var foo= "Foo", bar= "Bar"; 

    public1= { 
     getFoo: function(){ 
      return foo; 
     } 
    }; 
}()); 

I 그래서 같이 인생에서 객체를 반환 참조 번째 방법 :

var public2 = (function(){ 
    var foo2= "Foo2", bar2= "Bar2"; 

    return { 
     getBar: function(){ 
      return bar2; 
     } 
    }; 
}()); 

이 두 가지 방법간에 근본적인 차이점이 있습니까? 아니면 단지 선호 사항입니까? 나는 또한 당신이 원하는 경우 코드를 실행하거나 업데이트 할 수 있도록 바이올린을 만들었습니다. http://jsfiddle.net/bittersweetryan/gnh79/3/

+1

IIFE = 즉시 Function Expression을 호출합니다. 솔직히이 용어 나 약어에 대해 들어 보지 못했습니다. 나는 * immediate * 또는 * self-invoking 함수가 더 일반적이라고 생각한다. –

+1

@Felix : IIFE에 대해 논의하는 [다음 기사] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/) 및 그 이름의 이유. * "저는 즉시 호출 된 함수 표현식"이라는 용어를 제안합니다. 약어가 마음에 들면 "IIFE"입니다. 함수가 실행 중이더라도 자체 실행중인 함수가 아니기 때문에 "* – user113716

+1

@patrick : 감사합니다, 많이 감사드립니다! 나는 약어의 팬이 아니라고 생각한다.) : D –

답변

6

차이는 없습니다.

하지만 두 번째 것은 유지하기가 더 쉽다고 주장합니다. 첫 번째 예제에서 변수 이름을 변경하면 함수에서 변수 이름을 변경해야합니다.

+2

다른 첫 번째 경우에서 볼 수있는 유일한 이유는 범위의 맨 위에 변수를 선언하는 규칙이다. 두 번째 경우에는 IIFE가 관련 변수와 명시 적으로 연관되어 있으므로 IMHO는 더 중요한 기준입니다. :-) – RobG

관련 문제