JavaScript 클로저
JavaScript 변수는本地
로컬전역
또는
스코프를 통해 접근할 수 있습니다.클로저(clousure)
로컬(개인적인)을 구현할 수 있습니다.
전역 변수
함수는 함수내부정의된 모든 변수를 사용할 수 있습니다:
예제
function myFunction() { var a = 4; return a * a; }
하지만 함수는 함수외부정의된 변수와 같은 것을 사용할 수 있습니다:
예제
var a = 4; function myFunction() { return a * a; }
마지막 예제에서는a
는전역변수。
웹 페이지에서는 전역 변수는 window 객체에 속합니다.
전역 변수는 페이지(또는 윈도우)상의 모든 스크립트에서 사용하고 수정할 수 있습니다.
첫 번째 예제에서는a
는로컬변수。
로컬 변수는 그가 정의된 함수 내에서만 사용할 수 있습니다. 다른 함수와 스크립트 코드에서는 보이지 않습니다.
같은 이름을 가진 전역 변수와 로컬 변수는 다른 변수입니다. 하나를 수정하면 다른 것은 변경되지 않습니다.
또는키워드 var
생성된 변수는 항상 전역입니다. 심지어 함수 내에서 생성되어도 그렇습니다.
변수의 생명주기
전역 변수는 여러분의 애플리케이션(윈도우, 웹 페이지)과 같은 기간 동안 살아 있습니다.
로컬 변수는 오래가지 않습니다. 함수 호출 시 생성되고, 함수가 완료되면 제거됩니다.
계산자의 고난
변수를 사용하여 계산을 하고 싶다면, 그리고 모든 함수에서 이 계산자를 사용하고 싶다면:
전역 변수와 함수를 사용하여 계산자를 증가시킬 수 있습니다:
예제
// 계산자를 초기화 var counter = 0; // 계산자를 증가시키는 함수 function add() { counter += 1; } // add()를 세 번 호출 add(); add(); add(); // 이제 계산자는 3이어야 합니다
위의 해결책에는 문제가 있습니다: 페이지상의 어떤 코드든 add()를 호출하지 않고도 계산자를 변경할 수 있습니다.
add() 함수에서는 계산자가 로컬이어야 합니다. 다른 코드가 변경하지 않도록 합니다:
예제
// 계산자를 초기화 var counter = 0; // 계산자를 증가시키는 함수 function add() { var counter = 0; counter += 1; } // add()를 세 번 호출 add(); add(); add(); // 이제 계산자는 3이어야 합니다. 하지만 0입니다.
사용하지 않습니다.因为我们显示全局计数器而不是本地计数器。
함수를 반환하면 전역 계산자를 제거하고 로컬 계산자에 접근할 수 있습니다.:
예제
// 계산자를 증가시키는 함수 function add() { var counter = 0; counter += 1; return counter; } // add()를 세 번 호출 add(); add(); add(); // 이제 계산자는 3이어야 합니다. 하지만 1입니다.
사용하지 않습니다.因为我们每次调用函数时都会重置本地计数器。
JavaScript 내부 함수가 이 문제를 해결할 수 있습니다.
JavaScript 내장 함수
모든 함수는 전역 스코프에 접근할 권한을 가집니다.
실제로 JavaScript에서 모든 함수는 그 '위' 스코프에 접근할 권한을 가집니다.
JavaScript는 내장 함수를 지원합니다. 내장 함수는 상위 스코프에 접근할 수 있습니다.
이 예제에서는 내부 함수 plus()
부모 함수에서 접근할 수 있습니다. counter
계산자 변수:
예제
function add() { var counter = 0; function plus() {counter += 1;} plus(); return counter; }
이렇게 카운터 문제를 해결할 수 있습니다. 외부에서 카운터에 접근할 수 있다면. plus()
함수.
그리고 한 번만 실행되는 함수를 찾아야 합니다. counter = 0
메서드.
클로저(clousure)가 필요합니다.
JavaScript 클로저
자르기 함수를 기억하시나요? 이 함수는 무엇을 합니까?
예제
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // 카운터는 현재 3입니다
예제 설명
변수 add
의 할당은 자르기 함수의 반환 값입니다.
이 자르기 함수는 한 번만 실행됩니다. 카운터를 0으로 설정하고 함수 표현식을 반환합니다.
이렇게 add는 함수가 됩니다. 가장 "뛰어난" 부분은 부모 스코프의 카운터에 접근할 수 있다는 것입니다.
이것이 JavaScript입니다 클로저(clousure)함수는 "private변수가 가능하게 합니다.
카운터는 이 익명 함수의 스코프에 보호되며, add 함수를 통해만 수정할 수 있습니다.
클로저(clousure)는 부모 스코프에 접근할 권한을 가진 함수로, 부모 함수가 닫혀도 여전히 접근할 수 있습니다.