2017-11-14 13 views
2

누군가가이 자바 스크립트 조각을 설명 할 수 있습니까?

// JavaScript source code 
 
var foo = (function() { 
 
    var o = { bar: "bar" }; 
 

 
    return { 
 
     bar: function() { 
 
      console.log(o.bar); 
 
     } 
 
    }; 
 

 
})(); 
 

 
foo.bar();

무슨 일입니까? foo가 객체입니까? 명명 된 함수입니까? 이것은 개인 데이터 멤버의 클래스 개념을 제공하는 끔찍한 방법처럼 보입니다.

+2

[(function() {...})() "? (https://stackoverflow.com/questions/2421911/what-is)와 같은 익명의 함수에서 전체 Javascript 파일을 래핑하는 목적은 무엇입니까? -the-wrapping-of-wrapping-javascript-files-in-anonymous-functions-li) – SLaks

+0

@SLaks 나는 아무 말도하지 않을 것이다. 이 질문은 익명의 함수가 순전히 코드를 실행하고 값을 반환하지 않는 전체 파일에 관한 것입니다. – Kayla

답변

1

.

var foo = function() { 
    var o = { bar: "bar" }; 

    return { 
     bar: function() { 
      console.log(o.bar); 
     } 
    }; 

}; 

foo().bar(); 

var foo = (function() { 
    var o = { bar: "bar" }; 

    return { 
     bar: function() { 
      console.log(o.bar); 
     } 
    }; 

})(); 

foo.bar(); 

은 비슷합니다.

+0

첫 번째 예제는 내가보기를 기대했던 것입니다 ..... – SirPaulMuaddib

+0

예, 여분의 대괄호를 추가하면 할당 중에 그곳에 함수를 실행하고 있습니다. 이미 반환 값을 가지고있는 것과 같습니다. 위에 링크 된 기사를 통해 확인하십시오, 좋은 예가 있습니다. –

1

foo는 개체입니다. return 문 다음에 오는 객체입니다.

이 코드는 이러한 괄호 안에있는 함수를 선언 한 다음 즉시 호출합니다. foo는 함수가 반환하는 값을 할당받습니다. 그들은 IIFEhttps://developer.mozilla.org/en-US/docs/Glossary/IIFE

확인 인생의는 보통 자바 스크립트 모듈 패턴에 기록 된

http://javascriptissexy.com/understand-javascript-closures-with-ease/를 사용하는 예라고

+0

확실하지 않았습니다. foo가 명명 된 함수 인 것처럼 보였습니다. 함수에 할당되었습니다. 예, 수명 ... – SirPaulMuaddib

+0

@SirPaulMuaddib : 자세히 읽어보십시오. 그것은 함수를 호출 한 결과에 할당됩니다. – SLaks