자바스크립트에서 변수는 범위에 따라 로컬 변수와 전역 변수로 구분됩니다. 직접 정의된 변수는 전역 변수이고, 함수에서 정의된 모든 스크립트에서 액세스할 수 있는 전역 변수는 지역 변수입니다. 함수 내에서 유효합니다.
전역 변수와 지역 변수가 동일한 변수 이름을 사용하는 경우 지역 변수가 전역 변수를 덮어씁니다.
예제 코드:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js中全局变量与局部变量</title> </head> <body> <script type="text/javascript"> var a = "全局变量"; function test1() { var a = "局部变量"; alert(a); } function test2() { alert(a); var a = "局部变量"; alert(a); } function test3() { alert(a); a = "局部变量"; alert(a); } </script> <input type="button" value="test1" onclick="test1()"/> <input type="button" value="test2" onclick="test2()"/> <input type="button" value="test3" onclick="test3()"/> </body> </html>
작업 결과는 다음과 같습니다.
test1을 클릭하면 지역 변수가 팝업됩니다.
test2를 클릭하면 정의되지 않은 팝업이 나타난 다음 지역 변수가 팝업됩니다
test3을 클릭하여 전역 변수를 팝업한 다음 지역 변수를 팝업하세요
var를 사용할 때와 사용하지 않을 때의 차이점은 다음과 같습니다.
var를 사용하는 경우 프로그램은 강제로 새 변수를 정의합니다.
var를 사용하지 않는 경우 시스템은 먼저 현재 컨텍스트에 변수가 존재하는지 검색하고, 존재하지 않는 경우에만 새 변수를 재정의합니다.
테스트3에서 사용된 변수는 모두 글로벌 변수입니다. 처음에는 글로벌 변수를 직접 출력하고, 두 번째에는 글로벌 변수에 직접 값을 할당한 후 사용합니다.
test1과 test2 모두에서 var를 사용하여 함수에 동일한 이름의 새 변수를 정의하면 함수의 변수가 전역 변수를 덮어쓰게 됩니다. 따라서 test2에서 첫 번째 출력 a는 덮어쓴 지역 변수 a이지만 초기 값이 제공되지 않으므로 undefine 결과가 나타납니다. 이러한 방식으로 변수를 사용하는 것은 실제로 잘못된 것이므로 피해야 합니다.