JS에서의 범위 개념:
변수나 함수가 작동하는 영역을 나타내며, 이들이 실행되는 컨텍스트, 즉 컨텍스트 실행 환경을 가리킨다. Javascript에는 전역 범위와 로컬 범위라는 두 가지 범위만 있습니다.
먼저 몇 가지 질문을 살펴보겠습니다.
1.
if(true){
var aa= "bb"
}
console.log(aa); 🎜>for(var i = 0; i < 100; i ){
//do
}
console.log(i) //100
2 .
var bb = '11111'; 🎜>function aa() {
alert(bb);//undefine
var bb = 'test';
alert(bb);//test
var cc = "test1"; 🎜>alert(age);/ /구문 오류
}
aa();
3.
코드 복사
alert(test); }
function bb() {
var test = '22222222';
aa()
}
bb();//alert(1111111);
4.
코드 복사
}
alert(typeof bb);//function
코드 복사
코드는 다음과 같습니다.
aa()
alert(cc);//Test
alert(bb);//구문 오류
위 5가지 질문은 모두 js를 요약합니다. 중간 범위의 문제
는 다음과 같이 요약할 수 있습니다.
1. 블록 수준 범위가 없습니다
첫 번째 질문에서 볼 수 있듯이, {}에서는 실행 후 변수가 소멸되지 않지만 여전히 메모리에 저장되어 있으므로 액세스할 수 있습니다.
2. JavaScript의 함수는 실행되는 범위가 아닌 정의된 범위에서 실행됩니다.
함수 범위 체인의 개념은 ECMA262에서 언급됩니다. ,
모든 실행 컨텍스트 시간의 범위는 범위 체인에 의해 구현됩니다.
함수가 정의되면 정의된 범위는 [에 연결됩니다. [scope]] 이 함수 객체의 속성
함수 객체가 호출되면 활성 객체(즉, 객체)가 생성되고 각 함수의 형식 매개변수는 활성 객체의 명명된 속성으로 명명됩니다. 그러면 이때 이 활성 개체를 범위 체인의 프런트 엔드로 사용하고 이 함수 개체의 [[scope]]를 범위 체인에 추가합니다.
그래서 질문 3 결과는 Alert(1111111);
3. JS는 함수 정의와 var 키워드를 미리 처리합니다.
질문 4와 마찬가지로 start Alert(bb) //undefine, Alert(age) //Syntax error, what 둘의 차이점은 무엇인가요? 끝에 var bb = "test"가 있기 때문입니다. var 키워드는 초기화 시 미리 처리되지만 처음에는 할당되지 않습니다.
코드 수정 이렇게 보면
코드 복사
코드는 다음과 같습니다.
var cc = "test1 ";
alert(age);//구문 오류
}
aa()
alert(dd);//11111
alert(cc);// 구문 오류
여기서 Alert(bb)는 구문 오류를 보고하지 않지만, Alert(age)는 구문 오류를 보고합니다.
단, 참고하세요:
코드 복사
코드는 다음과 같습니다.