변수 범위
"변수의 범위는 변수가 존재하는 컨텍스트를 나타냅니다. 이는 액세스할 수 있는 변수와 변수에 액세스할 수 있는 권한이 있는지 여부를 지정합니다.
가변 범위는 로컬 범위와 전역 범위로 구분됩니다.
지역 변수(함수 수준의 범위)
다른 객체 지향 프로그래밍 언어(예: C, Java 등)와 달리 JavaScript에는 블록 수준 범위(중괄호로 둘러싸여 있음)가 없습니다. ; JavaScript에 함수 수준 범위가 있는 경우, 즉 함수 내에 정의된 변수는 함수 내에서 또는 함수 내의 함수에서만 액세스할 수 있습니다(클로저 제외). 이에 대한 주제는 며칠 후에 작성하겠습니다. .
함수 수준 범위의 예:
에는 블록 범위가 없습니다.
// var 키워드를 사용하는 것을 잊지 마세요
// var 키워드를 사용하지 않고 변수를 선언하면 해당 변수는 전역 변수가 됩니다!
// var 키워드를 사용하여 지역 변수를 선언하지 않으면 전역 범위의 일부가 됩니다.
var name = "Michael Jackson";
function showCelebrityName () {
console.log (이름);
}
function showOrdinaryPersonName () {
name = "Johnny Evers";
console.log (이름);
}
showCelebrityName (); // Michael Jackson
// name은 지역 변수가 아니며 단순히 전역 이름 변수를 변경합니다.
showOrdinaryPersonName () // Johnny Evers
// 전역 변수는 이제 유명인 이름이 아닌 Johnny Evers입니다
showCelebrityName (); // Johnny Evers
// 해결 방법은 var 키워드
function showOrdinaryPersonName()을 사용하여 로컬 변수를 선언하는 것입니다. {
var name = "Johnny Evers"; // 이제 name은 항상 지역 변수이며 전역 변수를 덮어쓰지 않습니다.
console.log (name);
}
// 지역 변수 전역 변수보다 우선순위가 높습니다
//전역 범위의 변수가 로컬 범위에서 다시 선언된 경우 이 변수를 로컬 범위에서 호출하면 로컬 범위에서 선언된 변수가 먼저 호출됩니다.
var name = "Paul";
function users () {
// 여기서 name 변수는 로컬 변수이며 전역 범위에서 동일한 이름 변수보다 우선합니다.
var name = "Jack";
// 전역 범위에서 함수 외부를 보기 전에 함수 내부에서 이름 검색이 바로 시작됩니다
console.log (name); >
사용자 () // 잭
함수 외부에서 선언된 모든 변수는 전역 범위에 속합니다. 브라우저 환경에서 이 전역 범위는 Window 객체(또는 전체 HTML 문서)입니다.
함수 외부에서 선언되거나 정의된 모든 변수는 전역 개체이므로 이 변수는 어디에서나 사용할 수 있습니다. 예를 들면 다음과 같습니다.
var 키워드를 사용하지 않고 처음으로 변수를 초기화/선언하면 전역 범위에 자동으로 추가됩니다.
setTimeout의 함수는 전역 범위에 있으므로 함수에서 this 키워드가 사용되면 this 키워드는 전역 객체(Window)를 가리킵니다.
전역 범위의 오염을 피하기 위해 일반적으로 우리는 가능한 한 적은 수의 전역 변수를 선언합니다.
변수 호이스팅
모든 변수 선언은 함수의 시작 부분(변수가 함수 내부에 있는 경우) 또는 전역 범위의 시작 부분(변수가 전역 변수인 경우)으로 호이스팅됩니다. 예를 살펴보겠습니다.