2014-03-28 2 views
6

나는 난 그냥 인생 래퍼를 치우는에 비해이 점을 이해하지 못하는이 오늘Javascript 왜 IIFE에 변수 또는 생성자를 래핑합니까?

var Visualizer = (function() { 
    function Visualizer() { 
    ... 
    } 
    Vizualizer.prototype.function1 = function() { ... } 
    ... 
    return Visualizer; 
})(); 

var viz = new Visualizer(); 

같은 것을 보았다.

+1

글쎄, 그 구체적인 경우에는별로 도움이되지 않지만, 도우미 기능이 필요하다면 어떨까요? 그것은 개인 정보를 보호하고 글로벌 범위로 유출되지 않기 때문에 유용합니다. – elclanrs

+0

도우미 함수를 래퍼에 넣는 것과 마찬가지로? 함수에 두는 것의 차이점은 무엇입니까? – natecraft1

+1

이렇게하면'new'를 호출 할 때마다 도우미 함수를 생성하게 될 것입니다. – elclanrs

답변

21

여기에 표시되는 특정 구문에 대한 요점은 없습니다. 이러한 유형의 구조에서 IIFE를 사용하는 이유는 선언 할 필요가 있고 객체에서 사용할 수 있지만 공개적으로 액세스 할 수 없거나 전역 네임 스페이스 또는 인스턴스를 방해하지 않으려는 정적 데이터가있는 경우입니다 데이터.

표시 한 코드는 그 중 어떤 것도 표시하지 않으므로 표시 한대로 실제로 이점을 제공하지 않습니다. 그러나 객체 외부에 선언 된 다른 변수가 있지만 IIFE 안에 있으면 IIFE는 객체를 보호하고 동봉하고 외부와 격리시킵니다. 예를 들어

,이 있었다면 그런 다음

Visualizer = (function() { 
    var counter = 0; 
    function Visualizer() { 
    counter++; 
    ... 
    } 
    Visualizer.prototype.getCount = function() { return counter; } 
    ... 
    return Visualizer; 
})(); 

var viz = new Visualizer(); 

이의 인생은 비주얼의 모든 인스턴스의 모든 방법을 사용할 수있을 것이라고 변수 counter을 둘러싸 일 수 있지만, 외부 세계와 분리 것을 IIFE는 잠재적 이익을 제공 할 것입니다.

+0

정말 근사한 설명 – natecraft1

-3

미안하지만 막연하게 말하면서 JS를 말하면서 JS가 어떤 작업이 우선 순위를 갖고 어떤 것이 무엇에 속하는지 알기 위해서는 제대로 대괄호를 사용해야한다고 생각합니다. 단순히 "무엇이 무엇인지"를 말하고 파이썬이 말하는 것입니다. 이 괄호가 없으면 대괄호가 필요없는 파이썬과 같은 메소드에 적절하게 의존 할 것입니다. 들여 쓰기가 중요합니다. 아마 나는 전체의 질문을 놓쳤다. 그러나 나는 그것이 올바르게 맞다고 생각한다.