클로저 vs 익명 기능 (차이?)
중복 가능성 : 일반
용어로 PHP 또는 Javascript의 Closures / Lambda는 무엇입니까?
'폐쇄'와 '람다'의 차이점은 무엇입니까?
안녕하세요,
클로저와 익명 함수의 차이점을 명확하게 설명하는 정의를 찾지 못했습니다.
내가 본 대부분의 참고 문헌은 뚜렷한 "사물"이라는 것을 분명히 명시하고 있지만 그 이유를 이해할 수없는 것 같습니다.
누군가 나를 위해 단순화 할 수 있습니까? 이 두 언어 기능의 구체적인 차이점은 무엇입니까? 어떤 시나리오에서 어떤 것이 더 적절합니까?
익명 함수는 이름이없는 함수일뿐입니다. 더 이상은 없습니다. 클로저는 주변 환경의 상태를 캡처하는 기능입니다.
익명 함수는 반드시 클로저를 생성 할 필요가 없으며 클로저는 익명 함수에 대해서만 생성되지 않습니다.
이 가상의 반례를 고려하십시오. 클로저를 지원하지 않지만 익명 기능을 지원하는 언어 Foo를 고려하십시오. 이 언어는 "greeting"이 내부 함수의 범위에 정의되지 않았기 때문에 아래 코드에 대해 컴파일되지 않거나 오류를 발생시킬 수 있습니다. 익명이라는 사실은 관련이 없습니다.
function outer() {
var greeting = "hello ";
(function(name) {
alert(greeting + name);
})("John Doe");
}
이제 클로저를 지원하는 실제 언어 인 JavaScript를 고려해 봅시다. 위와 동일한 예제를 사용하지만 이번에는 내부 함수의 이름을 지정하면 다음과 같은 결과가 나타납니다.
function outer() {
var greeting = "hello ";
(function inner(name) {
alert(greeting + name);
})("John Doe");
}
내부 함수는 더 이상 익명이 아니지만 주변 환경에서 상태를 캡처합니다.
클로저는 매우 필요한 편의를 제공합니다. 그렇지 않으면 함수의 모든 종속성을 인수로 전달합니다.
function outer() {
var greeting = "hello ";
(function(name, greeting) {
alert(greeting + name);
})("John Doe", greeting);
}
참고 URL : https://stackoverflow.com/questions/4912116/closure-vs-anonymous-function-difference
'Programing' 카테고리의 다른 글
리플 로우와 리 페인트의 차이점은 무엇입니까? (0) | 2020.11.12 |
---|---|
Intent.putExtra로 배열 보내기 (0) | 2020.11.12 |
웹 사이트 용 메트로 테마 (0) | 2020.11.12 |
Base64 인코딩의 실제 목적은 무엇입니까? (0) | 2020.11.12 |
위치별로 data.table에서 벡터로 열 추출 (0) | 2020.11.12 |