JS 패키지, 역할 영역

2832 단어 js 패키지 닫기
오늘 동료는 다음과 같은 JS 문제를 냈다.
 

  
    
function dosomething()
{
var x = 1 ;
if ( true )
{
var x = 2 ;
alert(x);
}
alert(x);
}

많은 사람들이'2'와'1'을 표시한다고 생각하는데, 이유는 2개의 x의 성명이 서로 다른 작용역 안에 있기 때문이다.
 
하지만 실제 결과는 사실'2','2', 이게 왜일까요?
인터넷에서 자료를 조회하여 설명을 하였다.

역할 영역


ECMAScript는 공통 도메인만


ECMAScript에 대한 토론에서 이러한 역할 영역은 거의 무의미하다. 왜냐하면 ECMAScript에는 하나의 역할 영역인 공용 역할 영역만 존재하기 때문이다.
ECMAScript의 모든 객체에 대한 모든 속성과 메서드는 공통입니다.따라서 자신의 클래스와 대상을 정의할 때는 각별히 조심해야 한다.기억해라, 모든 속성과 방법은 기본적으로 공용이다!

가방을 닫다


ECMAScript에서 가장 오해하기 쉬운 점은 패키지 닫기 (closure) 를 지원한다는 것이다.
패키지는 계산되지 않는 변수를 포함하는 함수를 나타내는 어법을 가리킨다. 즉, 함수는 함수 외에 정의된 변수를 사용할 수 있다는 것이다.

간단한 패키지 닫기 인스턴스


ECMAScript에서 전역 변수를 사용하는 것은 간단한 패키지 인스턴스입니다.다음 코드를 생각해 보십시오.
var sMessage = "hello world";

function sayHelloWorld() {
alert(sMessage);
}

sayHelloWorld();


위의 코드에서 스크립트가 메모리에 불러온 후 함수sayHelloWorld () 에 변수 sMessage의 값을 계산하지 않았습니다.이 함수가 sMessage를 포획하는 값은 나중에 사용하기 위해서입니다. 즉, 해석 프로그램은 이 함수를 호출할 때 sMessage의 값을 검사해야 한다는 것을 알고 있습니다.sMessage는 함수가sayHelloWorld () 를 호출할 때 (마지막 줄) 값이 부여되어 메시지 "hello world"를 표시합니다.

복잡한 패키지 인스턴스


하나의 함수에 다른 것을 정의하면 패키지를 더욱 복잡하게 할 수 있다.예:
var iBaseNum = 10;

function addNum(iNum1, iNum2) {
function doAdd() {
return iNum1 + iNum2 + iBaseNum;
}
return doAdd();
}


여기서 함수 addNum()에는 함수 doAdd()(패키지 닫기)가 포함됩니다.내부 함수는 외부 함수의 매개 변수인 iNum1과 iNum2, 전역 변수인 iBaseNum의 값을 가져오기 때문에 닫힌 패키지입니다.addNum () 의 마지막 단계에서 doAdd () 를 호출하여 두 개의 매개 변수와 전역 변수를 추가하고 그것들의 합을 되돌려줍니다.
여기서 파악해야 할 중요한 개념은doAdd() 함수는 파라미터를 전혀 받아들이지 않고 실행 환경에서 사용하는 값입니다.

좋은 웹페이지 즐겨찾기