>  기사  >  웹 프론트엔드  >  JavaScript 프로토타입 및 클로저 시리즈에 대한 나의 이해에 대해 이야기해 보세요(임의의 메모 9)_javascript 기술

JavaScript 프로토타입 및 클로저 시리즈에 대한 나의 이해에 대해 이야기해 보세요(임의의 메모 9)_javascript 기술

WBOY
WBOY원래의
2016-05-16 15:23:431221검색

관련 자료: JavaScript 프로토타입 및 클로저 시리즈에 대한 나의 이해에 대해 이야기해 보세요(Shuishou Note 6)

범위

"JavaScript 언어 본질 및 프로그래밍 실습"의 범위 정의 인용:


변수 범위는 변수의 가시성이라고도 합니다. 가변 범위는 정보의 은폐를 완료하여 "조각화" 문제를 해결합니다.


js에는 블록 수준 범위가 없습니다(ES6에는 {}, if 및 for에서 선언할 수 있는 let이 있으며 범위는 블록 수준으로 제한됩니다. 변수에 대한 변수 승격이 없습니다). let으로 선언했습니다! 우연히 봤기 때문에 여기서는 이야기하지 않겠습니다.


코드를 작성할 때 "블록"에 변수를 선언하면 안 됩니다. 모호함을 피하기 위해 코드 시작 부분에 변수를 선언해야 합니다.

 for(var i = 0; i < 10; i++) { //不好的声明方式
 //...
}
console.log(i);
/*----------------------------------------------*/
var i = 0; //好的声明方式
for(i = 0; i < 10; i++) {
 //....
}
console.log(i); 
JavaScript에는 전역 범위 외에도 함수 범위도 있습니다.

변수를 선언할 때 전역코드는 프론트엔드에 선언하고, 함수에서 선언한 변수는 반드시 함수 몸체 앞에 선언해야 합니다. 동시에 변수를 선언할 때는 "var" 연산자를 사용해야 합니다.

 var a = 10,  //全局作用域
 b = 20;
function fn() { //fn函数作用域
 var a = 100,
  c = 300;
 function bar() { //bar函数作用域
  var a = 1000,
   d = 4000;
 }
} 
전역 코드, fn 함수 및 bar 함수는 모두 범위를 형성합니다. 범위에는 상위-종속 관계가 있으며, 상위-종속 관계는 함수가 생성되는 범위에 따라 달라집니다. bar 함수는 fn 함수 범위 아래에 생성됩니다. "fn 함수 범위"는 "bar 함수 범위"보다 상위입니다.


범위의 가장 큰 용도는 서로 다른 범위에서 동일한 이름을 가진 변수를 격리하는 것입니다.


---------------------------------- --- ---------------------

범위는 함수가 호출될 때가 아니라 함수가 정의될 ​​때 결정됩니다.


1. 전역 컨텍스트 환경은 프로그램이 로드될 때 결정되며, 프로그램이 실행될 때 변수에 값이 할당됩니다.


2. 36행까지 실행하고, fn(10)을 호출하고, fn 함수의 실행 컨텍스트를 생성하고, 스택을 푸시하고, 이 컨텍스트를 활성 상태로 설정합니다.



3. 32행까지 실행하고 bar(100)을 호출하고 bar(100) 함수의 실행 컨텍스트를 생성한 후 스택을 푸시하고 이 컨텍스트를 활성 상태로 설정합니다.


4. bar(100)가 호출된 후 스택에서 제거되고 bar(100) 함수 컨텍스트가 삭제됩니다. 그런 다음 33행을 실행하고, bar(200)을 호출하고, bar(200) 함수의 실행 컨텍스트를 생성하고, 스택을 푸시하고, 이 컨텍스트를 활성 상태로 설정합니다.


5. bar(200)에 대한 호출이 완료된 후 스택에서 제거되고 해당 컨텍스트가 삭제됩니다. 이제 제어가 fn(10) 컨텍스트로 전달되어 다시 활성화됩니다.


6. 이때 fn(10)이 호출되어 스택에서 팝되고 해당 컨텍스트가 파괴됩니다. 제어는 전역 실행 컨텍스트로 이전됩니다.


이 시점에서 이 코드 조각의 실행 프로세스가 완료되었습니다.


원작가로부터 전체 사진을 빌려보세요.

요약:

스코프는 단지 "잔디"일 뿐이며 변수의 값은 스코프에 해당하는 실행 컨텍스트를 통해 얻어야 합니다. 동일한 범위에서 다른 호출은 다른 실행 컨텍스트를 생성하므로 다른 변수 값이 생성됩니다. 따라서 범위 내의 변수 값은 실행 중에 결정되지만 범위는 함수가 생성될 때 결정됩니다. 따라서 스코프에서 변수의 값을 찾으려면 이 스코프에 해당하는 실행 컨텍스트를 찾은 다음 그 안에 있는 변수의 값을 찾아야 합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.