우리 모두는 함수에 정의된 지역 변수가 항상 선언된 함수 본문과 중첩 함수 내에서 정의되고 함수의 범위 체인에서 전역 객체를 가리키는 객체가 항상 있다는 것을 알고 있습니다. 함수가 전역 변수에 액세스할 수 있도록 합니다.
var ga = 'global'; var func = function() { var la = 'local'; return function() { return function() { return function() { alert(la);alert(ga); } } } } a = func(); a()()();// 弹出 local 和 global
그렇다면 외부에 정의된 함수 A가 함수 본문의 함수 B에 의해 호출되면 A가 B에 정의된 지역 변수에 액세스할 수 있을까요? 대답은 '아니요'입니다. 위의 예를 다음과 같이 약간 수정하세요
var ga = 'global'; function repeat() { alert(la); } var func = function() { var la = 'local'; alert(1); repeat(); alert(2); }; func();
위 연산 결과는 1개만 뜨는 것입니다.peat를 호출하면 js 인터프리터가 정의되지 않은 변수에 액세스하여 프로그램을 중단하기 때문에 오류를 보고합니다.
이유는 함수가 정의될 때 범위 체인을 저장하기 때문입니다. 반복 함수는 해당 범위에 la라는 로컬 변수가 없습니다. 전역 범위에서 계속 검색하면 찾을 수 없습니다. la이므로 오류가 보고됩니다.
따라서 중첩된 함수와 함수 내의 외부 함수에 대한 중첩된 호출 사이에는 큰 차이가 있습니다.
어제 질문에 답하면서 생각했습니다 http://www.jb51.net/article/78958.htm. 개념은 이해하지만 항상 함수 내부에서 반복을 호출하고 싶었습니다. ? 그를 호출하는 함수의 로컬 변수에 접근할 수 없습니다. 오늘 다시 참고자료를 확인하고 코드로 직접 테스트해봤습니다. 이 글이 같은 고민을 하고 있는 친구들에게 도움이 되기를 바랍니다.