역할 영역 과 네 임 스페이스

3859 단어
역할 영역
어쨌든 함 수 는 자신의 역할 영역 을 가 진 유일한 구조 이 고 다른 어떠한 형식의 구조 도 역할 영역 을 지원 하지 않 습 니 다.코드 는 다음 과 같다.
var demo = function ()
{
	...
};

혹시
function demo ()
{
	...
};

JavaScript 언어 에는 명시 적 네 임 스페이스 정의 가 없습니다. 이 는 모든 대상 이 전체 적 으로 공 유 된 네 임 스페이스 에서 정의 되 었 음 을 의미 합 니 다.
변 수 를 참조 할 때 이 변 수 를 발견 할 때 까지 현재 역할 영역, 전역 역할 영역 을 위로 차례로 옮 겨 다 닙 니 다.
 
암시 적 전역 변수 와 부분 변수
함수 자체 역할 영역 에서 변수 성명 이 var 표현 식 을 사용 하지 않 으 면 암시 적 전역 변 수 를 만 들 수 있 습 니 다.먼저 아래 코드 를 보십시오
var demo = function ()
{
	number = 1;
};
demo();

혹시
var demo = function ()
{
	for (number = 0; number < 5; number ++)
	{
		...
	};
};
demo();

실행 결 과 는 전역 변수 number 를 설명 합 니 다.전역 역할 영역 에 있 는 동명 변 수 를 설명 하거나 덮어 쓰 려 면 var 표현 식 을 사용 해 야 합 니 다.코드 는 다음 과 같다.
var demo = function ()
{
	var number = 1;
};
demo();

혹시
var demo = function ()
{
	for (var number = 0; number < 5; number ++)
	{
		...
	};
};
demo();

실행 결 과 는 현재 역할 영역 에서 만 유효 하 다 는 부분 변수 number 를 설명 합 니 다.
 
변수 선언 향상 (호 이 스 팅)
변 수 는 자 바스 크 립 트 언어 에서 향 상 됩 니 다. 이것 은 var 표현 식, function 성명 이 현재 역할 영역 맨 위로 향 상 됩 니 다.먼저 아래 코드 를 보십시오
demo();
var demo = function ()
{
	...
};

혹시
demo();
function demo ()
{
	...
};

코드 가 실행 되 기 전에
var demo;
demo();
demo = function ()
{
	...
};

혹시
function demo ()
{
	...
};
demo();

실행 결 과 는 첫 번 째 코드 실행 에 실 패 했 고 두 번 째 코드 실행 에 성 공 했 습 니 다.첫 번 째 코드 가 실 행 될 때 demo 는 성명 에 불과 하지만, 여전히 undefined 값 이 부족 하기 때 문 입 니 다.
매우 재 미 있 는 것 은 부분 변수 성명 의 향상 이다.다음 코드 를 보십시오
var number = 0;
var demo = function ()
{
	if (true)
	{
		number = 1;
	}
	else
	{
		var number = 2;
	};
	console.log(number);
};
demo();
console.log(number);

코드 가 실행 되 기 전에
var number, demo;
number = 0;
demo = function ()
{
	var number;
	if (true)
	{
		number = 1;
	}
	else
	{
		number = 2;
	};
	console.log(number);
};
demo();
console.log(number);

출력 결 과 는 1, 0 입 니 다.전역 변수 number 를 덮어 쓰 는 코드 는 국부 변수 number 로 바 뀌 었 습 니 다. 전역 변수 number 를 덮어 쓰 려 면 모든 var 표현 식 을 취소 해 야 합 니 다.코드 는 다음 과 같다.
var number = 0;
var demo = function ()
{
	if (true)
	{
		number = 1;
	}
	else
	{
		number = 2;
	};
	console.log(number);
};
demo();
console.log(number);

출력 결 과 는 1, 1 입 니 다.
 
네 임 스페이스
전체 역할 영역 만 이름 충돌 을 일 으 킬 수 있 습 니 다. 솔 루 션 은 익명 포장 기 입 니 다. 익명 함 수 를 통 해 새로운 네 임 스페이스 를 만 드 는 역할 을 합 니 다.먼저 아래 코드 를 보십시오
(function (){
	...
})();

익명 함수 가 표현 식 으로 여 겨 지기 때문에 호출 성 을 위해 서 는 먼저 실행 해 야 합 니 다. 저 희 는 실 행 된 익명 함 수 를 익명 포장 기로 이해 할 수 있 습 니 다.다음 코드 를 보십시오
( //          
function ()
{
	...
}
) //      
(); //        ,              

익명 포장 기 를 통 해 네 임 스페이스 를 만 들 면 이름 충돌 을 방지 할 수 있 을 뿐만 아니 라 프로그램의 모듈 화 에 도 유리 합 니 다.
다른 함수 표현 식 호출 방법 도 있 습 니 다.코드 는 다음 과 같다.
+function (){
	...
}();

!function (){
	...
}();

(function (){
	...
}());

 
재 미 있 는 사고 문제
var number = 0;
(function (){
	console.log(number); //       
	var number = 1;
})();

좋은 웹페이지 즐겨찾기