[[범위]]:모든 자바스크립트 함수에는 다음이 있습니다. 객체의 일부 속성은 액세스할 수 있지만 일부 속성은 JavaScript 엔진에서만 액세스할 수 있습니다.
[[scope]]는 런타임 컨텍스트 모음을 저장하는 범위(scope)를 나타냅니다. 런타임 컨텍스트: 함수가 실행되면 실행 컨텍스트라는 내부 개체가 생성됩니다. 실행 컨텍스트는 함수가 실행될 때 해당 실행 컨텍스트가 고유하므로 함수를 여러 번 호출합니다. 함수가 실행을 완료하면 생성된 실행 컨텍스트가 삭제됩니다.
Scope 체인: [[scope]]에 저장된 실행 컨텍스트 개체의 컬렉션입니다. 이 컬렉션은 체인으로 연결됩니다.
function a(){ function b(){ function c(){ } } }
a 정의 a.[[범위]] ===> 0: GO
a 수행 a.[[범위]] ===> aAO
~ 🎜# 1: GO#🎜 🎜#
b 정의됨 b.[[범위]] ===> 0: bAO ~ ~ 🎜 🎜#c는 c.[[범위]] ===> 0: bAO 1: aAO c 정의됨 C. [[범위]] === & gt; 0: Cao#🎜🎜 ## 🎜🎜#1: BAO2: AAO#🎜🎜 ## 🎜🎜#3: Go#3: Go#🎜🎜 #Closure
내부 함수를 외부에 저장하면 클로저가 생성되어 원래 스코프 체인이 해제되지 않아 메모리 누수가 발생합니다.
function a(){ function b(){ var bbb = 234; console.log(aaa); } var aaa = 123; return b; } var glob = 100; var demo = a(); demo();
그럼 함수 b를 반환하기 전에 실행하려면 어떻게 해야 할까요?
즉시 실행 기능 소개즉시 실행 기능, 초기화 기능,
2.(function(){})()
수식만 실행할 수 있습니다. 실행 후 다시 사용할 수 없습니다
즉시 실행 기호로 실행되는 함수 표현식함수는 더하기 기호, 빼기 기호 등을 통해 함수 표현식으로 변환될 수 있습니다. #🎜🎜 #+/-/! function test(){
console.log('a'); }
function test(){ var arr = []; for(var i = 0;i < 10;i ++){ (function (j){ arr[j] = function(){ document.write(j+' '); } }(i)); } return arr; } var myarr = test(); for(var i = 0;i < 10;i ++){ myarr[i](); }
출력 결과는 다음과 같습니다: 1 2 3 4 5 6 7 8 9
관련 기사:
JavaScript 범위 및 클로저에 대한 자세한 설명관련 동영상:
JS Advanced Scope-Yan Shiba Javascript 고급 비디오 튜토리얼#🎜 🎜##🎜🎜 #위 내용은 Javascript의 범위 + 클로저에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!