>웹 프론트엔드 >JS 튜토리얼 >JavaScript 범위의 개념과 블록 수준의scope_javascript 기술 이해

JavaScript 범위의 개념과 블록 수준의scope_javascript 기술 이해

WBOY
WBOY원래의
2016-05-16 16:35:471066검색

범위는 모든 프로그래밍 언어에서 항상 가장 중요한 요소입니다. 변수와 매개변수의 가시성과 수명 주기를 제어하기 때문입니다. 말하자면, 먼저 블록 수준 범위와 함수 범위라는 두 가지 개념을 이해하세요.

블록 수준 범위란 무엇인가요?

중괄호 쌍({ 및 }) 안에 있는 모든 문 집합은 블록에 속하며, 여기에 정의된 모든 변수는 코드 블록 외부에서 볼 수 없습니다.

함수 범위는 이해하기 쉽습니다(*^__^*). 함수에 정의된 매개변수와 변수는 함수 외부에서 보이지 않습니다.

대부분의 C 계열 언어에는 블록 수준 범위가 있지만 JS는 그렇지 않습니다. 아래 데모를 참조하세요:

//C语言 
#include <stdio.h> 
void main() 
{ 
int i=2; 
i--; 
if(i) 
{ 
int j=3; 
} 
printf("%d/n",j); 
} 

이 코드를 실행하면 "정의되지 않은 변수를 사용하세요:j"라는 오류가 나타납니다. 보시다시피 C 언어에는 블록 수준 범위가 있습니다. j는 if 문 블록에 정의되어 있으므로 블록 외부에서는 액세스할 수 없습니다.

JS는 어떻게 작동하나요? 또 다른 데모를 살펴보겠습니다.

functin test(){ 
for(var i=0;i<3;i++){ 
} 
alert(i); 
} 
test();

이 코드를 실행하면 "3"이 나타납니다. 블록 외부에서는 블록에 정의된 변수에 계속 액세스할 수 있음을 알 수 있습니다. 즉, JS는 블록 수준 범위를 지원하지 않고 함수 범위만 지원하며, 함수 내 어디에서나 정의된 변수는 함수 내 어디에서나 볼 수 있습니다.

그렇다면 JS가 블록 수준 범위를 갖도록 하려면 어떻게 해야 할까요? 함수가 호출되면 함수에 정의된 변수가 삭제된다는 사실을 아직도 기억하시나요? 이 기능을 사용하여 JS의 블록 수준 범위를 시뮬레이션할 수 있나요? 아래 데모를 살펴보세요.

function test(){ 
(function (){ 
for(var i=0;i<4;i++){ 
} 
})(); 
alert(i); 
} 
test();

이때 다시 실행하면 "i" 정의되지 않은 오류가 뜹니다 ㅎㅎ 구현이 되었습니다~~ 여기서는 for 문 블록을 클로저에 넣은 후 이 함수를 호출합니다. 함수 호출이 완료되면 변수 i가 자동으로 소멸되므로 블록 외부에서 해당 변수에 접근할 수 없습니다.

JS의 클로저 기능은 가장 중요한 기능입니다((*^__^*) 다들 아시죠). JS에서는 이름 충돌을 방지하기 위해 전역 변수와 전역 함수의 사용을 피해야 합니다. 그렇다면 그것을 피하는 방법은 무엇입니까? 예, 위의 데모에서 볼 수 있듯이 정의하고 싶은 모든 것을

(function (){ 
//内容 
})();

현재로서는 외부 레이어에 함수 범위를 추가하는 것과 동일합니까? 이 범위 밖의 프로그램은 해당 항목에 액세스할 수 없습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.