최신 웹 개발 튜토리얼
 

JavaScript Closures


자바 스크립트 변수는 로컬 또는 글로벌 범위에 속할 수 있습니다.

개인 변수는 폐쇄로 가능하게 할 수있다.


글로벌 변수

함수는이 같은 함수 내에서 정의 된 모든 변수를 액세스 할 수 있습니다 :

function myFunction() {
    var a = 4;
    return a * a;
}
»그것을 자신을 시도

그러나 기능은이 같은 함수 외부에 정의 된 변수를 액세스 할 수 있습니다 :

var a = 4;
function myFunction() {
    return a * a;
}
»그것을 자신을 시도

마지막 예에서, 글로벌 변수이다.

웹 페이지에서 전역 변수는 window 객체에 속한다.

전역 변수 사용 (및 변경) 모든 스크립트 페이지에서 (그리고 윈도우에서) 할 수 있습니다.

첫 번째 예에서, 로컬 변수이다.

로컬 변수는이 정의 된 함수 내에서 사용될 수있다. 그것은 다른 기능과 다른 스크립트 코드에서 숨겨져 있습니다.

같은 이름을 가진 글로벌과 로컬 변수가 다른 변수입니다. 하나를 수정하면, 다른 수정하지 않습니다.

키워드 VAR없이 생성 변수는 그들이 함수 내에서 생성되는 경우에도, 항상 글로벌하다.


변수 수명

글로벌 변수는 응용 프로그램만큼 살 (/ 웹 페이지 당신의 창) 살고있다.

지역 변수는 짧은 삶을 가지고있다. 그들은 함수가 호출 될 때 생성되고 함수가 완료되면 삭제됩니다.


카운터 딜레마

당신이 뭔가를 계산하기위한 변수를 사용하려면, 당신은이 카운터는 모든 기능을 사용할 수있게하려면 가정하자.

사용자는 카운터를 증가시키는 전역 변수 및 함수를 사용할 수있다 :

var counter = 0;

function add() {
    counter += 1;
}

add();
add();
add();

// the counter is now equal to 3
»그것을 자신을 시도

카운터 만 변경해야 add() 함수입니다.

문제는 페이지의 모든 스크립트 호출하지 않고 카운터를 변경할 수있다 add() .

나는 함수 내부 카운터를 선언하면, 아무도) (추가 호출하지 않고 변경 할 수 없습니다 :

function add() {
    var counter = 0;
    counter += 1;
}

add();
add();
add();

// the counter should now be 3, but it does not work !
»그것을 자신을 시도

그것은 작동하지 않았다! I 통화마다 add() 함수는, 카운터가 1로 설정된다.

자바 스크립트 내부 함수는이 문제를 해결할 수 있습니다.


자바 스크립트 중첩 함수

모든 기능은 전역에 액세스 할 수 있습니다.

사실, 자바 스크립트, 모든 기능은 그 "위의"범위에 액세스 할 수 있습니다.

자바 스크립트는 중첩 된 기능을 지원합니다. 중첩 된 함수는 그 "위의"범위에 액세스 할 수 있습니다.

이 예에서, 내부 기능 plus() 상위 함수의 카운터 변수에 대한 액세스를 갖는다 :

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
»그것을 자신을 시도

우리가 도달 할 수있는 경우에, 카운터 딜레마를 해결할 수 있었다 plus() 외부에서 기능을.

우리는 또한 한 번만 카운터 = 0을 실행하는 방법을 찾을 필요가있다.

우리는 폐쇄가 필요합니다.


자바 스크립트 클로저

자기 호출 함수를 기억 하는가? 이 기능은 무엇입니까?

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3
»그것을 자신을 시도

예 설명

추가 변수는 자동 호출 함수의 리턴 값이 할당된다.

자기 호출 함수는 한 번만 실행됩니다. 이 영 (0)으로 카운터를 설정하고, 함수 식을 반환합니다.

이 방법의 추가 함수가된다. 은 "좋은"부분은 상위 범위에서 카운터를 액세스 할 수있다.

이것은 자바 스크립트 클로저라고합니다. 그것은 가능 함수가 "개인"변수를 가질 수 있도록합니다.

카운터는 익명의 기능의 범위에 의해 보호되고, 단지 추가 기능을 사용하여 변경 될 수있다.

클로저는 상위 함수가 폐쇄 된 후에도, 상위 범위를 갖는 기능에 액세스한다.