javascript - 인터뷰 질문: 클로저를 사용하는 이유는 무엇입니까?
이 답변을 읽어보니 내용을 잘 이해하지 못한 것 같습니다.
저는 Java를 배우고 있습니다. 오늘 인터뷰에서 면접관님이 익명 클래스에 대해 언급하셨는데, Java 8에서는 Lamada 스타일이 제공되고, JS에도 클로저라는 개념이 있다고 하더군요. 면접관이 폐쇄가 무엇인지 물었습니다. 클로저를 사용하는 이유는 무엇입니까?
다음과 같이 말했습니다. 액세스를 제어하는 데 사용하세요. 내부는 외부에 접근할 수 있지만 외부는 내부에 접근할 수 없습니다.
면접관은 이 대답에 별로 만족하지 않는 것 같았습니다. 전문가들은 이 문제에 대해 어떻게 생각하는지 궁금합니다.
답글 내용:
이 답변을 읽어보니 내용을 잘 이해하지 못한 것 같습니다.
저는 Java를 배우고 있습니다. 오늘 인터뷰에서 면접관님이 익명 클래스에 대해 언급하셨는데, Java 8에서는 Lamada 스타일이 제공되고, JS에도 클로저라는 개념이 있다고 하더군요. 면접관이 폐쇄가 무엇인지 물었습니다. 클로저를 사용하는 이유는 무엇입니까?
다음과 같이 말했습니다. 액세스를 제어하는 데 사용하세요. 내부는 외부에 접근할 수 있지만 외부는 내부에 접근할 수 없습니다.
면접관은 이 대답에 별로 만족하지 않는 것 같았습니다. 전문가들은 이 문제에 대해 어떻게 생각하는지 궁금합니다.
클로저는 이름 그대로 찐빵이 찐빵으로 변해요~
찐빵은 밀가루로만 만들어지고 속을 채우면 찐빵이 됩니다
바오즈는 속을 채워 만든 찐빵입니다
클로저는 자체 운영 환경에 따라오는 기능입니다
파게는 자기만의 배경음악이 있는 남자에요~
자체적인 운영 환경을 가져온다는 말의 의미를 이해하지 못하는 아이들도 있어요~
또 다른 예를 들어볼까요~
프로그래머들은 다들 라면을 먹어보셨나요?
일반 라면과 무엇이 다른가요?
조미료 팩을 직접 가져오시면 됩니다.
양념봉지는 라면을 조리하는 환경입니다.
국수 조리 과정을 단순화합니다. 이를 통해 사용자는 요리 기술을 익히지 않고도 맛있는 쇠고기 국수를 즐길 수 있습니다.
함수형 프로그래밍의 종결은 함수의 조미료 패키지입니다. 사용자가 함수를 호출할 수 있는
편의성. 복잡한 외부 상태 유지에 대해 걱정할 필요가 없습니다.
예를 들어 Python은 다양한 방식으로 클로저를 사용합니다.
정적 개인 변수~
부분 함수~
단일 매개변수화~
데코레이터~
……
이 기능을 사용하면 실제로는 남들이 설정한 양념 패키지로 '라면'을 먹는 셈입니다.
사실 제가 이해한 바는 클로저의 목적은 변수의 범위를 확장하는 것입니다.
함수 즉시 실행과 클로저의 관계는 무엇인가요
@biancheng의 이해에 집중하세요. 제 답변이 상대적으로 약합니다. 그래도 관심이 있으시면 Height Three의 스코프 체인 및 클로저에 대한 설명을 읽어보세요~
방금 읽은 기사: 역사상 가장 욕을 먹은 프로그래밍 언어 - JavaScript
작가님 답변이 정확하지도 않고 제가 면접관이었다면 만족스럽지 못했을 것 같아요.
간단히 말하면 클로저란 함수가 객체로 반환될 때 외부 변수가 연행되면 클로저가 형성되는 것을 의미합니다. 찐빵을 속재료로 만들어 찐빵이 되었다고 비유한 동급생의 대답은 대부분 농담이었지만 그의 이해는 매우 깊었습니다.
함수가 외부 변수를 패키징하면 프로그램에 많은 유연성을 제공할 수 있습니다. 클로저는 외부 세계와 동일한 함수이지만(호출 방법은 동일하게 유지됨) 왜냐하면 그 안의 변수가 다르면 많은 기능이 완성될 수 있기 때문입니다. 이건 동급생이 말한건데 자체적인 동작환경과 배경음악이 딸려오는 기능이라 생각하면 무섭네요.
더 자세히 알고 싶으시면 제가 요약한 글을 참조하시면 Python의 클로저에 대해 자세히 설명할 수 있습니다. 프로그래밍 언어는 다르지만 원리는 동일합니다.
귀하의 답변은 종결이 아니라 범위에 관한 것입니다. 그리고 이 답변 역시 부정확한 답변입니다. 무엇이 내부이고 무엇이 외부인지 전혀 설명할 수 없습니다.
클로저도 이런 것 같아요. 함수가 정의된 범위 외부에서 호출되면 해당 함수는 정의된 범위에 계속 액세스합니다. 이 현상을 폐쇄라고 합니다.
특정 용도가 많이 있으며, 일반적인 용도로는 개인 속성 생성, 함수 커링 등이 있습니다.
------------구분선------------
클로저의 본질은 정적 범위라는 점을 덧붙이고 싶습니다. JavaScript에는 동적 범위가 없기 때문에 함수가 정의될 때 범위에 액세스하므로 클로저를 구현할 수 있습니다.
다른 답변에서는 클로저가 자체 운영 환경과 함께 제공되는 기능이라고 말합니다. 그런데 사실 자바스크립트의 모든 함수는 자체적인 실행 환경을 가지고 있는 함수가 아닌가요? 어떤 사람들은 모든 함수가 클로저라고 믿습니다. 이것은 확실히 틀린 것은 아니지만 클로저를 이해하는 데는 실제로 큰 의미가 없습니다. 보통 이런 식으로 함수를 사용하기 때문에 클로저가 무엇인지 모르더라도 문제가 되지 않습니다. 단지 전역 범위가 큰 폐쇄라는 사실을 깨닫지 못할 수도 있습니다.
일반적인 클로저 형식은 함수 a가 함수 b를 덮고 함수 a가 함수 b를 반환하므로 함수 b가 함수 a가 아닌 다른 곳에서 실행될 때 여전히 함수 a의 범위에 액세스할 수 있다는 것입니다. 그 중 "함수 b가 함수 a가 아닌 다른 곳에서 실행될 때"에는 클로저의 실제 위력이 반영됩니다.
요컨대 클로저는 정적 범위를 기반으로 한 프로그래밍 기술일 뿐입니다. 인터뷰 관점에서 클로저가 무엇인지 대답하려면 먼저 정적 범위의 특징을 설명해야 하며, 그 다음 "함수 b가 함수 a가 아닌 다른 곳에서 실행될 때"는 클로저로 간주된다는 점을 강조해야 합니다. .Bao의 완전한 답변.
람다 미적분학은 단일 입력과 단일 출력만 허용하므로 lambda a, b: a + b
는 커링인 lambda a: lambda b: a + b
과 같습니다.
간단히 말해서 클로저의 정의는 함수가 정의된 범위에 액세스할 수 있다는 것입니다.
그래서 말씀하신 접근 제어는 클로저의 적용 시나리오일 뿐이죠. 물론 클로저가 무엇인지에 대한 질문에는 대답을 해주지 않았기 때문에 면접관은 당연히 불만을 품게 될 것입니다.
또한 Java는 실제로 클로저를 지원하지 않습니다. 익명 내부 클래스는 클로저와 유사해 보이지만 실제로는 기능이나 구현 측면에서 클로저로 간주될 수 없습니다. 이유:
기능적으로 익명 내부 클래스에서 액세스되는 변수는 final이어야 합니다(Java8은 암시적으로 final을 선언함)
구현상 익명 내부 클래스에서 접근하는 final 변수 값은 실제로 외부에서 복사되기 때문에 실제로는 이전 스코프에 접근할 수 없기 때문에 final이어야 한다.
소위 "클로저"는 많은 변수와 이러한 변수에 바인딩된 환경을 포함하는 표현식(보통 함수)을 의미하므로 이러한 변수도 표현식의 일부입니다.
Javascript에서 클로저 생성을 가장 잘 설명하는 방법은 다음과 같습니다.
<code>function a(){ var i=0; function b(){ alert(++i); } return b; } var c=a(); c();</code>
함수 b는 함수 a 내에 중첩되어 있습니다. 함수 a는 함수 b를 반환합니다.
이런 식으로 var c=a()를 실행한 후 변수 c는 실제로 함수 b를 가리킵니다. c()를 다시 실행하면 i 값을 표시하는 창이 팝업됩니다(처음은 1입니다). 이 코드는 실제로 클로저를 생성합니다. 함수 a 외부의 변수 c는 함수 a 내부의 함수 b를 참조하기 때문입니다. 즉, 함수 a의 내부 함수 b가 함수 a 외부의 변수에 의해 참조되면 A 클로저가 생성됩니다. .
사실 일반적인 클로저 작성 형태에 따르면 간단히 말하면 함수 안에 함수가 중첩되어 있는 것입니다. 팀 개발에서는 이름 충돌을 방지하기 위해 일반적으로 해당 코드를 전역 범위에 노출되지 않도록 클로저 형식으로 래핑합니다. 하지만 단점은 내부 변수가 즉시 재활용되지 않고, 메모리 오버플로의 위험이 있다는 점입니다.

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

PHP8에서 매치 표현식은 표현식의 값에 따라 다른 결과를 반환하는 새로운 제어 구조입니다. 1) 스위치 명령문과 유사하지만 실행 명령문 블록 대신 값을 반환합니다. 2) 경기 표현식은 엄격하게 비교되어 (===) 보안을 향상시킵니다. 3) 스위치 명세서에서 가능한 파손을 피하고 코드의 단순성과 가독성을 향상시킵니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4
