이 기사에서는 주로 js의 범위 및 함수 폐쇄에 대한 예를 공유합니다. 1. js의 범위에는 블록 수준 범위가 없고 전역 범위와 함수 범위만 있습니다. 예:
if(true){ var a=100; } console.log(a);
Java 또는 C에서 중괄호는 블록 외부에서 얻을 수 없음을 의미하지만 js에서는 가능합니다. 이는
var a; if(true){ a=100; }
특별한 경우:
function Loga(){ a=100 } console.log(a);
여기서 a를 얻을 수도 있습니다. 함수 내부에서 var 없이 변수를 직접 선언하면 상위 범위도 범위로 간주됩니다. 그러나 일반적으로 이렇게 작성하는 것은 권장되지 않습니다. , 선언이 필요합니다.
함수 범위에 대한 문자 그대로의 이해는 함수 내부에 정의된 변수가 함수 내부에서 작동한다는 것입니다.
함수 범위와 전역 범위의 차이점은 전역 범위의 변수는 함수 범위 내에서 호출되고 수정될 수 있다는 것입니다. 전역 범위는 함수 범위에 정의된 변수를 호출할 수 없습니다. 여기서 정의는 매우 중요합니다(수정 여부). 이는 범위 체인을 포함하며, 이는 변수가 상위 범위의 변수에 차례로 액세스할 수 있음을 의미합니다. 내부에서는 접근이 가능하지만 외부에서는 접근이 불가능합니다.
2. 클로저의 개념에 대한 정확한 정의는 없습니다.
a. 반환 값으로 사용되는 함수
예:
function F1(){ var a=100 return function(){ console.log(a);//a是自由变量 } } var a=200; var f=F1(); f();
이것은 일반적인 폐쇄 사례입니다. 반환 값은 함수이고 실행 환경은 전역이지만 생성 환경은 F1이므로 출력은 100입니다. 변수는 상위 스코프인 F1에서 검색해야 합니다.
두 번째 경우에는 함수가 매개변수로 전달됩니다
function F1(){ var a=100 return function(){ console.log(a); } } var a=200; var f=F1(); function F2(fn){ var a=300; fn(); } F2(f);
분명히 결과도 같고 이유도 같고 실행 환경도 같습니다 F2이지만 생성 환경은 상위 범위인 F1입니다. F1이므로 출력은 여전히 100입니다.
관련 권장 사항:스코프 체인 및 프로토타입 체인과 js의 프로토타입 상속
위 내용은 js의 범위 및 함수 폐쇄에 대한 예제 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!