범위는 변수 및 매개 변수의 가시성 및 수명주기를 제어하기 때문에 모든 프로그래밍 언어에서 항상 최우선 순위입니다. 이것에 대해 말하면, 먼저 두 가지 개념의 블록 수준 범위와 함수 범위를 이해합니다.
블록 레벨 범위는 무엇입니까?
모든 곱슬 버팀대 ({및}) 쌍에 설정된 명령문은 블록에 속하며, 이에 정의 된 모든 변수는 코드 블록 외부에서는 보이지 않으며 블록 레벨 스코프라고합니다.
함수의 범위는 이해하기 쉽고 (*^__^*) 함수에 정의 된 매개 변수와 변수는 함수 외부에서 보이지 않습니다.
대부분의 C 클래스 언어에는 블록 수준의 스코프가 있지만 JS는 그렇지 않습니다. 아래 데모를 참조하십시오.
// c 언어#포함 <stdio.h> void main () {int i = 2; 나--; if (i) {int j = 3; } printf ( "%d/n", j); }이 코드를 실행할 때 "정의되지 않은 변수 사용 : j"오류가 나타납니다. 보시다시피, C 언어는 IF의 명령문 블록에 J가 정의되어 있으므로 블록 수준의 스코프가 있으므로 블록 외부에서는 액세스 할 수 없습니다.
그리고 JS는 어떻게 수행합니까? 또 다른 데모를 살펴 보겠습니다.
functin test () {for (var i = 0; i <3; i ++) {} alert (i); } 시험();이 코드를 실행하면 "3"가 팝업됩니다. 블록 외부에서 블록에 정의 된 변수에 여전히 액세스 할 수 있음을 알 수 있습니다. 즉, JS는 블록 레벨 스코프를 지원하지 않으며 기능 스코프 만 지원하며 함수의 어느 곳에서나 정의 된 변수는 해당 기능의 어느 곳에서나 볼 수 있습니다.
그렇다면 JS가 블록 레벨 범위를 갖도록하려면 어떻게해야합니까? 함수에 정의 된 변수가 호출되면 변수가 파괴된다는 것을 여전히 기억하십니까? 이 기능을 사용하여 JS의 블록 레벨 범위를 시뮬레이션 할 수 있습니까? 다음 데모를보십시오.
함수 test () {(function () {for (var i = 0; i <4; i ++) {}}) (); 경고 (i); } 시험();이 시점에서 다시 실행하면 "I"의 정의되지 않은 오류가 나타납니다. 하하, 그것은 ~~~ 여기에 구현되었습니다. 우리는 for 문을 클로저에 넣고이 기능을 호출합니다. 함수 호출이 완료되면 변수가 자동으로 파괴되므로 블록 외부에 액세스 할 수 없습니다.
JS의 폐쇄 기능은 가장 중요한 기능입니다 ((*^__^*) 모두가 이해하는 것). JS에서는 명명 충돌을 방지하기 위해 글로벌 변수와 글로벌 기능을 사용하지 않도록 노력해야합니다. 그래서 그것을 피하는 방법은 무엇입니까? 좋아, 위의 데모와 같이, 우리는 정의하고 싶은 모든 것을 하나로 넣을 수 있습니다.
(function () {// content}) ();그중에서도 현재, 외부 레이어에 함수 범위를 추가하는 것과 같습니다. 이 범위 이외의 프로그램은 이들에 액세스 할 수 없습니다.