> 웹 프론트엔드 > JS 튜토리얼 > js closure_javascript 기술의 경우와 장단점 분석

js closure_javascript 기술의 경우와 장단점 분석

WBOY
풀어 주다: 2016-05-16 15:53:39
원래의
1398명이 탐색했습니다.

먼저 코드:

//函数a
function a()
{
var i=0;
//函数b
function b()
{
alert(++i);
}
return b;
}
//函数c
var c = a();
c();

로그인 후 복사

코드 기능:

1. 함수 b는 함수 a 안에 중첩되어 있습니다.
2. 함수 a는 함수 b를 반환합니다.
코드에 있는 함수 a의 내부 함수 b가 함수 a 외부의 변수 c에 의해 참조되는 경우 이를 클로저 생성이라고 합니다. 때로는 함수 b가 익명 함수, 즉 return function(){};

에 의해 반환될 수도 있습니다.

장점: 1. 함수 내 변수의 보안을 보호하고 캡슐화를 강화합니다. 2. 변수를 메모리에 유지합니다. (너무 많이 사용하면 단점이 되고 메모리를 차지하게 됩니다.)
클로저가 리소스를 차지하는 이유는 함수 a가 종료될 때 변수 i가 소멸되지 않는다는 것입니다. 왜냐하면 함수 a가 종료되기 때문입니다. 왜냐하면 b의 실행은 a의 변수에 따라 달라지기 때문입니다.
시나리오에 적합하지 않음: 클로저를 반환하는 함수는 매우 큰 함수입니다

일반적인 폐쇄 프레임워크는 jquery입니다.

클로저는 JavaScript 언어의 주요 기능입니다. 클로저의 주요 용도는 비공개 메서드와 변수를 설계하는 것입니다.
이는 프레임워크를 만들 때 더욱 분명해집니다. 일부 메서드와 속성은 작업 논리 프로세스에서만 사용되므로 이러한 속성의 외부 수정을 허용하지 않으므로 메서드 액세스만 제공하도록 클로저를 설계할 수 있습니다.

클로저의 단점은 메모리에 상주하므로 메모리 사용량이 증가한다는 것입니다. 부적절한 사용으로 인해 메모리 누수가 쉽게 발생할 수 있습니다.

요약:

장점:

1. 논리적 연속성. 클로저를 다른 함수 호출의 매개변수로 사용하면 현재 로직에서 벗어나 추가 로직을 별도로 작성하는 것을 방지할 수 있습니다.
2. 컨텍스트의 지역 변수 호출을 촉진합니다.
3. 캡슐화를 강화하면 2번 항목을 확장하면 변수를 보호할 수 있습니다.

단점:

클로저는 메모리 낭비라는 매우 심각한 문제를 가지고 있습니다. 이러한 메모리 낭비는 메모리에 상주하기 때문일 뿐만 아니라, 더 중요한 것은 클로저를 잘못 사용하면 잘못된 메모리가 생성된다는 것입니다. :

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

로그인 후 복사

위의 테스트를 통해 abc()를 1만 번 실행하여 생성된 동일한 논리적 클로저의 주소가 동일하지 않음을 알 수 있습니다. 즉, 동일한 Function 객체가 잔뜩 생성되므로 장점은 팩토리 모드를 사용하여 사용할 함수를 생성할 수 있다는 것입니다. 그러나 실수로 클로저를 일반 논리로 사용하면 필연적으로 메모리 가비지가 발생합니다. 구문을 변경하면 이해하기 더 쉬울 수 있습니다.

var foo = new Function();

로그인 후 복사

따라서 클로저에 관해 내 습관에 관한 한 나는 가능하면 사용하지 않습니다. 꼭 사용해야 한다면 클로저 객체의 수를 적게 또는 고유하게 유지하는 방법을 찾으세요.

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿