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

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

May 16, 2016 pm 04:35 PM
범위

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

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

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

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

대부분의 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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어에서 typedef 구조체 사용법 C 언어에서 typedef 구조체 사용법 May 09, 2024 am 10:15 AM

C 언어에서 typedef 구조체 사용법

Java에서 예상되는 변수를 해결하는 방법 Java에서 예상되는 변수를 해결하는 방법 May 07, 2024 am 02:48 AM

Java에서 예상되는 변수를 해결하는 방법

js 클로저의 장점과 단점 js 클로저의 장점과 단점 May 10, 2024 am 04:39 AM

js 클로저의 장점과 단점

C++에서 include의 의미는 무엇입니까? C++에서 include의 의미는 무엇입니까? May 09, 2024 am 01:45 AM

C++에서 include의 의미는 무엇입니까?

C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석 C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석 May 09, 2024 am 11:06 AM

C++ 스마트 포인터: 수명 주기에 대한 포괄적인 분석

js에서 이것이 다음을 가리키는 여러 가지 상황이 있습니다. js에서 이것이 다음을 가리키는 여러 가지 상황이 있습니다. May 06, 2024 pm 02:03 PM

js에서 이것이 다음을 가리키는 여러 가지 상황이 있습니다.

C++에서 함수 정의와 호출을 중첩할 수 있나요? C++에서 함수 정의와 호출을 중첩할 수 있나요? May 06, 2024 pm 06:36 PM

C++에서 함수 정의와 호출을 중첩할 수 있나요?

Java에서는 클로저가 어떻게 구현됩니까? Java에서는 클로저가 어떻게 구현됩니까? May 03, 2024 pm 12:48 PM

Java에서는 클로저가 어떻게 구현됩니까?

See all articles