JScript 구문 튜토리얼을 언제 읽었는지 기억도 나지 않습니다. 변수를 선언할 때 var 키워드를 무시하는 것이 완전히 합법적이라고 했습니다. 그 당시에는 JavaScript가 느슨한 형식의 언어이기 때문에 var가 실제로는 장식에 불과할 수도 있다고 느꼈습니다. 그러나 당연한 결과가 신뢰할 수 없다는 사실이 종종 입증됩니다.
다음 예의 결과를 보면 문제를 알 수 있습니다.
No.1
]
2번
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
3번
[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
이 세 가지 예제의 실행 결과는 다음과 같습니다. 코드 복사
코드는 다음과 같습니다. >
결과#지역 결과
1번
0
정의되지 않음
2번
0
1
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와 같이 시작 부분에도 사용할 수 있습니다. $$$도 유효한 변수 이름인 희미합니다.