>웹 프론트엔드 >JS 튜토리얼 >javascript_javascript 기술의 범위에 대한 간략한 토론

javascript_javascript 기술의 범위에 대한 간략한 토론

WBOY
WBOY원래의
2016-05-16 17:54:301128검색

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.



코드 복사
코드는 다음과 같습니다. var test = '1111111' function aa() {
alert(test); }

function bb() {
var test = '22222222';
aa()
}

bb();//alert(1111111);


4.



코드 복사
코드는 다음과 같습니다. alert(typeof aa); //function Alert(typeof bb); //함수 정의 alert('I am 111111111'); 🎜>var bb = function() { //함수식 수식
}
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 dd = '11111'; function aa() { alert(bb);//undefine   var bb = 'test' alert(bb);//test
  var cc = "test1 ";
alert(age);//구문 오류
}
aa()
alert(dd);//11111
alert(cc);// 구문 오류


여기서 Alert(bb)는 구문 오류를 보고하지 않지만, Alert(age)는 구문 오류를 보고합니다.

단, 참고하세요:



코드 복사


코드는 다음과 같습니다.