자바스크립트 폐쇄 🎆
5030 단어 javascriptclosure
이제 폐쇄에 대해 이야기할 시간입니다.
폐쇄 란 무엇입니까?
클로저는 외부 함수가 반환된 후에도 외부 함수 범위에 액세스할 수 있는 함수입니다. 즉, 클로저는 함수가 완료된 후에도 외부 함수의 변수와 인수를 기억하고 액세스할 수 있습니다.
클로저에 대해 알아보기 전에 먼저 어휘 범위를 이해합시다.
어휘 범위 란 무엇입니까?
JavaScript의 어휘 범위 또는 정적 범위는 소스 코드의 물리적 위치를 기반으로 하는 변수, 함수 및 개체의 액세스 가능성을 나타냅니다. 예를 들어:
let a = 'global';
function outer() {
let b = 'outer';
function inner() {
let c = 'inner'
console.log(c); // prints 'inner'
console.log(b); // prints 'outer'
console.log(a); // prints 'global'
}
console.log(a); // prints 'global'
console.log(b); // prints 'outer'
inner();
}
outer();
console.log(a); // prints 'global'
여기서
inner
함수는 자체 범위, outer
함수의 범위 및 global
범위에 정의된 변수에 액세스할 수 있습니다. 그리고 outer
함수는 자체 범위와 global
범위에 정의된 변수에 접근할 수 있습니다.따라서 위 코드의 범위 체인은 다음과 같습니다.
Global {
outer {
inner
}
}
inner
함수는 lexical scope
의 outer function
로 둘러싸여 있으며, 이는 global scope
로 둘러싸여 있습니다. That’s why the inner function can access the variables defined in outer function and the global scope.
퀴즈 — 지식 테스트
아래 코드는 무엇을 출력할까요?
var name = 'John'
function greet (name) {
return (function () {
console.log('Hello ' + name)
})
}
var sayHello = greet(name)
name = 'Sam'
sayHello()
정답은 Hello John입니다.
예, sayHello를 호출하기 전에 name 값을 'Sam'으로 변경했지만. 마치 '샘'에게 재할당되기 전에 이름값을 캡쳐한 것 같다.
예, sayHello를 호출하기 전에 name 값을 'Sam'으로 변경했지만. 마치 '샘'에게 재할당되기 전에 이름값을 캡쳐한 것 같다.
그것이 정확히 일어난 일입니다. 이것은 행동의 종결입니다.
Reference
이 문제에 관하여(자바스크립트 폐쇄 🎆), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abdulazizcode/javascript-closure-le5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)