처음 클로저를 이해하려고 할 때 클로저를 만지기 전에 이해할 수없는 컴퓨터 과학의 꿰 뚫을 수없는 벽으로 만났습니다. 그럼, 원숭이의 더 원숭이 기준을 참조에 배운 자바 스크립트 키워드, 자바의 관용구를 수의 (여기 내 흐릿한 기억을 용서)하지 않았다 동안 그 :자바 스크립트와 같은 다중 패러다임/기능 언어에서 정보 숨기기 외에도 클로저의 진정한 가치 제안은 무엇입니까?
JAVA :
class ObjectWithPrivateMember()
{
private int counter;
public void ObjectWithPrivateMember()
{
counter = 0;
}
public void increment()
{
counter += 1;
}
public void decrement()
{
counter -= 1;
}
public void get_count()
{
return counter;
}
}
자바 스크립트를 (ECMAScript를 다시 몇 년 현재) 진짜 "개인"/ "보호"키워드를 가지고,하지만 자바 관용구의 무료 번역 될 수 뭔가 같은 :
JAVASCRIPT :
var object_with_private_member = function()
{
var counter = 0;
return {
increment: function()
{
counter += 1;
},
decrement: function()
{
counter -= 1;
},
get_count: function()
{
return counter;
}
};
}();
JavaScript가 아닌 뭔가로 자바 스크립트를 작성하려고하는 덕트 테이프에 대한 즉각적인 반응 외에도 나는 "알았어."라는 말로 정신병 학자가 "좋아, 자바 관용구를 어둡게 만드는 방법입니다. JavaScript. 이것은 아마도 the Wikipedia entry는 몇 가지 세부 사항을 제공? "폐쇄 정말 좋은 무엇"나는 질문을 해결하기 위해 돌아왔다 이제
을 ". 자바 스크립트에 대한 중대한 무엇에 약간의 직접적인 통찰력을 가르치시 및 정보 숨어 수 있음을 시사 무거운 기능성 구부러진 다중 패러다임 언어뿐만 아니라 일류 함수 언어에 대한 일반적인 용의자 일 수 있습니다. 물론 더 자세히 설명되어 있고 더 많은 뉘앙스를 제공하지만 교과서 "JavaScript 객체 개인 필드가있는 경우 "유스 케이스는 내가 가정 한 것처럼 거의 접하지 않습니다.
좋은 기능을하는 프로그래머가 순수한 기능의 la에서 클로저를 볼 수있는 실제 용도는 무엇입니까? nguages 또는 다중 패러다임 언어를 기능적으로 구부리고 있습니까? 주로 정보 숨기기에 사용됩니까? (the Wikipedia article은 위의 캐리커처보다 더 많은 뉘앙스와 세부적인 정보를 제공하지만, 처음에는 폐쇄가 개인 회원을 만드는 백도어 방식보다 JavaScript에서 더 크고 흥미로운 역할을했을 것이라는 생각이 들었습니다.)
순수/멀티 패러다임 함수형 언어에 숨어있는 정보에 대한 메커니즘 외에이 다른 주요 사용 사례 있습니까?
이 질문은 [Programmers Stack Exchange] (http://programmers.stackexchange.com/)에 더 적합 할 것입니다. –
개체는 가난한 사람의 종결 일뿐입니다. – Pointy
질문에 Java 및 JavaScript 태그가 붙은 이유는 무엇입니까? Java 8+에서 람다는 클로저의 예이며 동등한 로컬 클래스로 확장되는 통합 설탕을 제공하여 보일러 플레이트 코드를 줄일 수 있습니다. 마지막으로 [IIFE] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/)가 JavaScript에서 클로저를 사용하는 유일한 방법은 아닙니다. –