JavaScript 클로저는 적극적인 개발 및 수동 개발의 특징입니다. 즉, JS는 몇 가지 문제를 더 잘 해결하기 위해 폐쇄되어 있습니다. 반면에 특정 문제를 해결하기 위해 JS는 문제를 거의 해결하기 위해 클로저를 사용해야합니다.
전자는 여기서 논의되지 않습니다. JS 클로저가 문제를 더 잘 해결할 수 있다면 물론 클로저를 사용하는 것이 좋습니다.
내가 논의하는 것은 JS 자체의 한계와 "변수의 요구 사항 만 초기화된다"와 같이 폐쇄로 해결 해야하는 문제로 인해 후자입니다.
기존의 언어는 이것을 해결합니다.
코드 사본은 다음과 같습니다.
클래스 클래스 {
함수 init () {
this.n = 0;
}
function func () {
this.n ++;
이것을 반환하십시오 .n;
}
}
var obj = new Class ();
JavaScript는 일반적으로 이러한 방식으로 해결됩니다 (폐쇄 사용) :
코드 사본은 다음과 같습니다.
var obj = {
func : (function () {
var n = 0;
return function () {
n ++;
리턴 n;
}
}) ()
}
그러나이 방법 (폐쇄 제거)을 권장합니다.
코드 사본은 다음과 같습니다.
function class () {
var self = 이것;
self.n = 0;
self.func = function () {
self.n ++;
Self.n을 반환합니다.
}
}
var obj = new Class ();
후자는 더 확장 가능하기 때문입니다. 변수에서 다른 작업을 구현 해야하는 경우, 후자는 다른 함수 (즉, 간단한 선형 확장) 만 정의 할 수 있지만, 전자 (폐쇄)는 완전히 다시 작성해야합니다 (이것은 종종 리팩토링이라는 단어를 듣는 이유).