Programing

클로저 vs 익명 기능 (차이?)

lottogame 2020. 11. 12. 07:41
반응형

클로저 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

반응형