다음 예제의 결과를 보면 문제를 알 수 있습니다.
이 세 가지 예제의 실행 결과는 다음과 같습니다.
결과#지역 결과
1번
0
정의되지 않음
2번
0
1
No.3
0
undefine
#endregion
알고 보니 JavaScript 변수에도 범위가 있지만 매우 일반적이며 전역 변수로 나누어져 있습니다. 그리고 함수 변수. 두 번째 예에서는 모든 변수가 전역 변수이고 해당 명령문 블록이 총 두 개의 변수를 정의하므로 0과 1을 얻습니다. 함수 외부의 첫 번째와 세 번째 전역 변수는 실제로 var 키워드의 존재 여부가 중요하지 않음을 의미합니다. 함수 내의 var 키워드는 매우 중요합니다. 이는 두 번째 var01이 함수 내의 변수이므로 var01을 초기화하기 전의 출력은 당연히 '정의되지 않음'임을 나타냅니다.
그럼 전역 var01이 함수에서 차단된 건가요? 우리는 C/C에서 ::를 사용하여 전역 변수에 접근할 수 있다는 것을 알고 있지만 JavaScript에서도 가능합니까? 실제로 전역 변수가 무엇인지 이해하는 한 쉬울 것입니다. 전역 변수는 Window 객체의 창 인스턴스에 동적으로 추가된 속성이므로 값 1을 얻으려면 함수 내에서 document.write(window.var01);만 사용해야 합니다. 동시에, 이 맥락에서 함수의 this는 가리키는 창 인스턴스이기도 합니다. 참조를 this.var01로 작성할 수도 있습니다.
그런데 JScript 튜토리얼을 다시 읽어보니 변수는 [a-zA-Z_] [a-zA-Z0-9_]* 형식만 가능하지만 '$' 형식도 가능하다고 나와 있었습니다. 변수 이름 문자로 사용할 수도 있습니다. $1234와 같이 시작 부분에도 사용할 수 있습니다. $$$도 유효한 변수 이름인 희미합니다.
이것이 사실인지 알고 싶습니다. 함수를 호출할 때 프로그램 실행 순서는 먼저 함수의 내부 변수에 var라는 키워드가 있는지 확인한 다음 다른 범위와 변수가 다른 변수에 할당됩니다. 확인 결과에 따르면 이 세 가지 함수에서 var01 변수는
function get_global_var(___name)
{
return eval(___name);
}
function set_global_var(___name,___value)
{
eval (___name "=___value");
}
var aa=11;
Test()
WScript.Echo(aa);//22
function Test()
{
var aa=33;
WScript.Echo(get_global_var("aa"));//11
set_global_var("aa",22); .Echo(get_global_var("aa "));//22
WScript.Echo(aa);//33
}
위의 예에서 이는 결코 Test를 참조하지 않습니다. , 그러나 항상 WScript의 예입니다.
문을 작성하면: var test = new Test(); Test의 this는 Test의 인스턴스를 참조합니다. 이 경우 전역 변수를 사용하려는 경우 Lostinet이 메서드를 제공합니다.
그러나 가장 쉬운 방법은 전역을 개체에 전달하고 다음과 같이 Test를 정의하는 것입니다.
function Test(global)
{
// ...
}
다음과 같이 인스턴스를 생성합니다. var test = new Test(this); 테스트 인스턴스에서는 전역 개체 및 속성만 사용할 수 있습니다.
이런가요? new의 경우 인스턴스를 의미하고, 그렇지 않으면 WScript를 의미합니까? 그렇다면 스크립트 엔진을 바꾸면 상황이 달라지나요? 이것이 표준입니까?
new 생성자[(인수)];
new 연산자는 다음 작업을 수행합니다.
·멤버가 없는 객체를 생성합니다.
·해당 객체의 생성자를 호출하여 새로 생성된 객체에 대한 포인터를 this 포인터로 전달합니다.
·그런 다음 생성자는 전달된 매개변수를 기반으로 객체를 초기화합니다.
현재 범위에서 new가 호출되지 않더라도 상위 범위에서 new가 호출될 수 있으므로 "new 인스턴스에서는 해당 인스턴스를 참조하고, 그렇지 않으면 WScript를 참조합니까?"라는 점에 유의해야 합니다. 전반부는 맞는 문장이지만 후반부는 그렇지 않습니다.