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

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

May 16, 2016 pm 03:53 PM
js 장점과 단점 폐쇄

먼저 코드:

//函数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();

로그인 후 복사

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

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 Apr 03, 2024 am 11:55 AM

얼굴 검출 및 인식 기술은 이미 상대적으로 성숙하고 널리 사용되는 기술입니다. 현재 가장 널리 사용되는 인터넷 응용 언어는 JS입니다. 웹 프런트엔드에서 얼굴 감지 및 인식을 구현하는 것은 백엔드 얼굴 인식에 비해 장점과 단점이 있습니다. 장점에는 네트워크 상호 작용 및 실시간 인식이 줄어 사용자 대기 시간이 크게 단축되고 사용자 경험이 향상된다는 단점이 있습니다. 모델 크기에 따라 제한되고 정확도도 제한됩니다. js를 사용하여 웹에서 얼굴 인식을 구현하는 방법은 무엇입니까? 웹에서 얼굴 인식을 구현하려면 JavaScript, HTML, CSS, WebRTC 등 관련 프로그래밍 언어 및 기술에 익숙해야 합니다. 동시에 관련 컴퓨터 비전 및 인공지능 기술도 마스터해야 합니다. 웹 측면의 디자인으로 인해 주목할 가치가 있습니다.

C++ 람다 표현식에서 클로저의 의미는 무엇입니까? C++ 람다 표현식에서 클로저의 의미는 무엇입니까? Apr 17, 2024 pm 06:15 PM

C++에서 클로저는 외부 변수에 액세스할 수 있는 람다 식입니다. 클로저를 생성하려면 람다 표현식에서 외부 변수를 캡처하세요. 클로저는 재사용성, 정보 숨기기, 지연 평가와 같은 이점을 제공합니다. 이는 클로저가 외부 변수가 파괴되더라도 여전히 접근할 수 있는 이벤트 핸들러와 같은 실제 상황에서 유용합니다.

시스템 구입 전 꼭 읽어야 할 내용: Win11과 Win10의 장단점 분석 시스템 구입 전 꼭 읽어야 할 내용: Win11과 Win10의 장단점 분석 Mar 28, 2024 pm 01:33 PM

오늘날의 정보화 시대에 개인용 컴퓨터는 우리 일상생활에 없어서는 안 될 도구로서 중요한 역할을 하고 있습니다. 컴퓨터의 핵심 소프트웨어 중 하나인 운영 체제는 사용 경험과 작업 효율성에 영향을 미칩니다. 시장에서는 Microsoft의 Windows 운영 체제가 항상 지배적인 위치를 차지해 왔으며 이제 사람들은 최신 Windows 11과 기존 Windows 10 중에서 선택해야 하는 상황에 직면해 있습니다. 일반 소비자의 경우 운영 체제를 선택할 때 버전 번호만 보는 것이 아니라 장점과 단점도 이해합니다.

템플릿의 장점과 단점은 무엇입니까? 템플릿의 장점과 단점은 무엇입니까? May 08, 2024 pm 03:51 PM

템플릿 작성: 장점과 단점 템플릿 작성은 재사용 가능한 코드 블록을 생성할 수 있는 강력한 프로그래밍 기술입니다. 이는 다양한 장점을 제공하지만 일부 단점도 제공합니다. 장점: 코드 재사용성: 템플릿을 사용하면 애플리케이션 전체에서 재사용할 수 있는 공통 코드를 생성하여 중복 및 유지 관리 노력을 줄일 수 있습니다. 일관성: 템플릿을 사용하면 코드 조각이 여러 위치에서 동일한 방식으로 구현되어 코드 일관성과 가독성이 향상됩니다. 유지 관리성: 템플릿에 대한 변경 사항은 이를 사용하는 모든 코드에 동시에 반영되므로 유지 관리 및 업데이트가 단순화됩니다. 효율성: 템플릿을 사용하면 동일한 코드를 반복해서 작성할 필요가 없으므로 시간과 노력이 절약됩니다. 유연성: 템플릿을 사용하면 다양한 애플리케이션 요구 사항에 쉽게 적용할 수 있는 구성 가능한 코드 블록을 만들 수 있습니다. 결점

Java Servlet 작동 방식의 장점과 단점은 무엇입니까? Java Servlet 작동 방식의 장점과 단점은 무엇입니까? Apr 16, 2024 pm 03:18 PM

JavaServlet은 동적 웹 페이지를 구축하는 데 사용되는 Java 클래스이며 클라이언트와 서버 간의 브리지 역할을 합니다. 작동 원리: 요청 수신, 서블릿 초기화, 요청 처리, 응답 생성 및 서블릿 닫기. 장점: 휴대 가능하고 확장 가능하며 안전하고 사용하기 쉽습니다. 단점: 오버헤드, 결합 및 상태 관리. 실제 사례: "Hello, Servlet!"을 표시하는 간단한 서블릿을 만듭니다.

C++ 람다 표현식에서 클로저를 구현하는 방법은 무엇입니까? C++ 람다 표현식에서 클로저를 구현하는 방법은 무엇입니까? Jun 01, 2024 pm 05:50 PM

C++ Lambda 표현식은 함수 범위 변수를 저장하고 함수에 액세스할 수 있도록 하는 클로저를 지원합니다. 구문은 [캡처 목록](매개변수)->return-type{function-body}입니다. 캡처 목록은 캡처할 변수를 정의합니다. [=]를 사용하여 모든 지역 변수를 값으로 캡처하고, [&]를 사용하여 모든 지역 변수를 참조로 캡처하거나, [변수1, 변수2,...]를 사용하여 특정 변수를 캡처할 수 있습니다. 람다 표현식은 캡처된 변수에만 액세스할 수 있지만 원래 값을 수정할 수는 없습니다.

C++ 함수에서 클로저의 장점과 단점은 무엇입니까? C++ 함수에서 클로저의 장점과 단점은 무엇입니까? Apr 25, 2024 pm 01:33 PM

클로저는 외부 함수의 범위에 있는 변수에 액세스할 수 있는 중첩 함수입니다. 클로저의 장점에는 데이터 캡슐화, 상태 보존 및 유연성이 포함됩니다. 단점으로는 메모리 소비, 성능 영향, 디버깅 복잡성 등이 있습니다. 또한 클로저는 익명 함수를 생성하고 이를 콜백이나 인수로 다른 함수에 전달할 수 있습니다.

PHP 프레임워크의 장점과 단점 비교: 어느 것이 더 좋나요? PHP 프레임워크의 장점과 단점 비교: 어느 것이 더 좋나요? Jun 04, 2024 pm 03:36 PM

PHP 프레임워크의 선택은 프로젝트 요구 사항과 개발자 기술에 따라 다릅니다. Laravel: 기능이 풍부하고 커뮤니티가 활발하지만 학습 곡선이 가파르고 성능 오버헤드가 높습니다. CodeIgniter: 가볍고 확장하기 쉽지만 기능이 제한되고 문서가 적습니다. Symfony: 모듈식이며 강력한 커뮤니티이지만 복잡한 성능 문제가 있습니다. ZendFramework: 엔터프라이즈급이며 안정적이고 신뢰할 수 있지만 라이센스 비용이 크고 부피가 큽니다. 슬림(Slim): 마이크로 프레임워크로 빠르지만 기능이 제한되고 학습 곡선이 가파릅니다.

See all articles