관련 자료: JavaScript 프로토타입 및 클로저 시리즈에 대한 나의 이해에 대해 이야기해 보세요(Shuishou Note 6)
범위
for(var i = 0; i < 10; i++) { //不好的声明方式 //... } console.log(i); /*----------------------------------------------*/ var i = 0; //好的声明方式 for(i = 0; i < 10; i++) { //.... } console.log(i);
변수를 선언할 때 전역코드는 프론트엔드에 선언하고, 함수에서 선언한 변수는 반드시 함수 몸체 앞에 선언해야 합니다. 동시에 변수를 선언할 때는 "var" 연산자를 사용해야 합니다.
var a = 10, //全局作用域 b = 20; function fn() { //fn函数作用域 var a = 100, c = 300; function bar() { //bar函数作用域 var a = 1000, d = 4000; } }
범위는 함수가 호출될 때가 아니라 함수가 정의될 때 결정됩니다.
1. 전역 컨텍스트 환경은 프로그램이 로드될 때 결정되며, 프로그램이 실행될 때 변수에 값이 할당됩니다.
2. 36행까지 실행하고, fn(10)을 호출하고, fn 함수의 실행 컨텍스트를 생성하고, 스택을 푸시하고, 이 컨텍스트를 활성 상태로 설정합니다.
4. bar(100)가 호출된 후 스택에서 제거되고 bar(100) 함수 컨텍스트가 삭제됩니다. 그런 다음 33행을 실행하고, bar(200)을 호출하고, bar(200) 함수의 실행 컨텍스트를 생성하고, 스택을 푸시하고, 이 컨텍스트를 활성 상태로 설정합니다.
5. bar(200)에 대한 호출이 완료된 후 스택에서 제거되고 해당 컨텍스트가 삭제됩니다. 이제 제어가 fn(10) 컨텍스트로 전달되어 다시 활성화됩니다.
6. 이때 fn(10)이 호출되어 스택에서 팝되고 해당 컨텍스트가 파괴됩니다. 제어는 전역 실행 컨텍스트로 이전됩니다.
이 시점에서 이 코드 조각의 실행 프로세스가 완료되었습니다.
요약: