다시 오신 것을 환영합니다.
이 비디오에서는 클로저에 대해 이야기 할 것입니다.
클로저는 머리를 감싸는 더 어려운 개념 중 하나입니다.
그러나 일단 당신이 정말로 정의가 무엇인지 이해하면, 나는 그 중 몇 가지를 보았을 때 훨씬 더 쉬울 것입니다.
그러면이 비디오에서 우리는 무엇을 할 것입니까?
우리는 종결이 무엇인지 아닌지 이해할 것입니다.
개인 변수를 에뮬레이션하기 위해 클로저를 사용할 것입니다.
우리는 현실 세계에서 클로저에 대한 몇 가지 유스 케이스를 나열 할 것입니다.
클로저가 무엇입니까?
클로저는 이전에 반환 된 외부 함수에 정의 된 변수를 사용하는 함수입니다.
그래서 나는 그 정의가 지금은별로 의미가 없을 수도 있음을 안다.
바로 지금 예제를 살펴 보겠습니다.
커맨드 옵션 Jay를 누르고 크롬 개발 도구를 열어 보겠습니다.
이제 closure가 함수에서 정의 된 변수를 잘 사용하는 함수 인 경우 외부 함수를 만들어 보겠습니다.
그래서이 함수의 외부 함수 인 amik을 문자열과 동일한 data라는 변수로 만들 것입니다.
클로저는 외부 함수 내부에 있습니다.
Inner와 Inner라는 새로운 함수를 반환하거나 내부 데이터라는 변수를 만들고 내부 데이터는 문자열과 같습니다.
굉장해.
이제이 내부 함수 안에서 문자열을 반환 할 것입니다. 문자열 클로저는 문자열과 함께 있습니다.
굉장해.
이제이 외부 함수를 호출 해 봅시다.
그리고 그것은 우리에게 무엇을 돌려 주어야합니까?
그것은 내부 함수의 정의를 반환 할 것입니다.
그러나이 내부 함수의 내부에서 외부 함수에 정의 된 데이터라는 변수를 사용하고 있습니다.
그래서이 외부 함수를 호출하고 즉시 내부 함수를 호출하면 문자열이 반환됩니다.
클로저는 굉장합니다.
따라서 클로저의 힘을 실제로 볼 수는 없겠지만, 이것은 내부 함수의 내부에서이 데이터 변수와 같은 외부 함수에 정의 된 변수를 사용하는 좋은 예일뿐입니다.
외부 함수가 이미 여기에 알림을 반환하면 외부 함수가 반환되지만 외부 함수가 이미 반환 된 경우에도이 데이터 변수를 사용할 수 있습니다.
다른 예를 살펴 보겠습니다.
여기에 나는 매개 변수 A를 취하는 Outer라는 함수를 가지고 있고 매개 변수 b를 취하는 Inner라는 함수를 반환합니다.
내부 함수는 외부 함수에서 정의 된 변수 A와 외부 함수가 반환 된 시간을 사용합니다.
그래서이 함수 inner는 다른 예제처럼 클로저입니다. 여기서 주목해야 할 몇 가지 사항을 보았습니다.
우리는이 함수가 작동하도록 내부 함수를 반환해야하고 외부 함수를 호출 한 다음 즉시 내부 함수를 호출하거나 내부 함수의 결과를 변수에 저장하고 일반적으로 수행하는 나중에 호출 할 수 있습니다.
빠른 운동을 해보 죠.
이 기능 중 하나에 잠시 동안 클로저 퍼즐 비디오가 포함되어 있는지 파악할 수 있는지 확인하십시오.
이 첫 번째 기능에서 무엇을 생각해 냈습니까?
우리는 내부 함수가 리턴 한 외부 함수에서 찾을 변수를 사용하지 않는다는 것을 알 수 있습니다.
여기 두 번째 예제에서는 클로저가 포함되어 있지 않습니다.
우리는 내부 함수가 내부 함수가 호출 될 때 반환 된 외부 함수에 정의 된 데이터라는 변수를 사용하고 있음을 볼 수 있습니다.
첫 번째 것은 아니지만 두 번째 것은 항상 클로저의 정의로 돌아갑니다.
그리고 내부 함수가 외부 함수에서 변수를 사용하지 않는다는 것을 알게되면 아마도 클로저가 아닙니다.
언제 폐쇄를 사용합니까?
클로저에 대한 유용한 사용 사례는 다른 언어로 된 개인 변수에 대한 개념을 만드는 것입니다.
우리가 private 변수라고 부르는 외부 적으로 수정할 수없는 변수에 대한 지원이 있지만 javascript에는 내장 변수가 없습니다.
고맙게도 폐쇄가 우리를 도울 수 있습니다.
자이안 (Jagan)의 프레스 명령 옵션에서 크롬 개발자 도구에있는이 예제를 살펴보고 카운터를 열고이 카운터 함수 내부에 함수를 작성해 보겠습니다.
count라는 변수를 만들어서 제로와 같게 만들고이 카운터 함수 안에 새로운 함수를 반환 할 것입니다.
이 함수에 이름을 부여하지 않는다는 바로 그 통지가 없습니다.
이러한 기능은 익명으로 처리되기 때문입니다.
따라서이 함수의 이름을 지정하려면이 함수를 계산과 같이 호출 할 수 있지만 필요하지는 않습니다.
그리고이 내부 함수의 내부에서 나는 플러스 카운트를 반환 할 것입니다.
접두사 연산자로 플러스 플러스를 사용하는 이유는 처음으로 내가 호출하는 이유는 1까지 올라갑니다.
이제이 카운터 함수를 C라는 변수와 같게 설정하면 R C가 카운터와 동일하게 저장됩니다.
이제 C를 살펴볼 때 C가 될 것이라고 생각합니까?
우리가 전에 본 것처럼.
함수 정의가 될 것입니다. C를 다시 호출하면 1 씩 증가 된 개수를 반환 할 것입니다.
그것을 다시 반복하자.
하지만 이것에 대해 정말 좋은 점은 현재 아무도 변수 범위에 접근 할 수 없다는 것입니다.
내가 카운트를 액세스하려고하면 카운트가 정의되지 않는다고 말하는 참조를 얻으려고합니다.
그리고 count는 개인 변수이므로 아무도 들어올 수 없으며 count의 값을 변경하면 항상 0이됩니다.
동영상을 일시 중지하고 크롬 콘솔에서이 예를 복사 해 봅니다.
폐쇄가 어떻게 작동하는지 이해하면 많은 도움이됩니다.
이 교실 함수 안에있는 사적인 변수의 또 다른 예를 살펴 보겠습니다.
강사라는 변수가 있습니다.이 변수는 LP라고하는 두 개의 문자열 배열입니다.
이 교실 함수는 두 가지 기능을 가진 객체를 반환합니다.
강사와 강사를 구하십시오 강사가 강사에게 혼란을 표시 할 수있게하려면 매개 변수를 가져 와서 강사의 배열에 추가하는 함수입니다.
그럼 여기에서 폐쇄가 어디에서 일어나고 있는지.
GET 강사가 강사 기능을 추가하는 것에 주목하십시오.
이 함수의 외부에있는이 강사의 변수와이 함수는 모두 여기에서 사용합니다.
따라서이 두 함수는 강사를 얻고 강사를 추가하면 이미 반환 된 외부 함수에 정의 된 변수가 사용됩니다.
여기서 강사가 엘렌 콜트 (Ellen colt)의 배열을 인쇄 할 수있게하고 강사가 저에게 배열에 강사를 추가하고 이론을 돌려 줄 수 있다는 것을 알 수 있습니다.
그러나 다른 변수로 새로운 교실을 만들면 강사가 생겨서 이안이 여기에 없다는 것을 알 수 있습니다.
마지막으로 클로저를 사용하여 강사 변수를 여기에 개인 변수로 지정했습니다.
누구도 교실을 만들 수 없으므로 교실을 만들 때마다 강사가 항상 골목이라고 불릴 것입니다.
그래서 잠시 동안 당신과 붙어있는 것처럼 보입니다. 여기에 작은 예제가 있습니다 만, 여러분이 배우게 될 많은 도구와 기술은 클로저를 꽤 많이 사용합니다.
그래서 그 코드 중 일부를보고있을 때 그 클로저가 어디에 있는지를 알아낼 수 있는지 알아보기 위해 최선을 다하십시오.
물론 당신에게도 지적해야합니다.
그러면 우리는 무엇을 배울 것입니다.
내부 함수가 이미 반환 된 외부 함수에서 선언 된 변수를 사용하고 클로저가 존재하지 않으면 클로저가 존재합니다.
내부 함수를 반환하지 않고 해당 내부 함수가 외부 함수에서 반환 된 변수를 사용하지 않으면 폐쇄 변수를 사용하여 개인 변수를 만들고 논리와 응용 프로그램을 격리하는 더 나은 코드를 작성할 수 있음을 알았습니다.
그리고 그것은 폐쇄를위한 것입니다.