>  기사  >  웹 프론트엔드  >  Javascript의 범위 + 클로저에 대한 자세한 설명

Javascript의 범위 + 클로저에 대한 자세한 설명

php是最好的语言
php是最好的语言원래의
2018-08-04 10:45:072476검색

범위:

[[범위]]:모든 자바스크립트 함수에는 다음이 있습니다. 객체의 일부 속성은 액세스할 수 있지만 일부 속성은 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: BAO

2: 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();

a 함수는 b 함수가 소멸되기 전에 b 함수를 반환하므로 b 함수에 의해 생성된 스코프 체인은 소멸되지 않으며, 이때 b 함수는 아래에서 console.log(aaa)를 호출하면 b 함수가 실행됩니다. bAO에는 aaa 변수가 없으므로 상위 aAO에 aaa = 123이 있으므로 결과는 123입니다.#🎜 🎜 #

그럼 함수 b를 반환하기 전에 실행하려면 어떻게 해야 할까요?

즉시 실행 기능 소개

즉시 실행 기능, 초기화 기능,

1.(함수( ){}()); (w3c에서는 첫 번째 것을 권장함)

2.(function(){})()

수식만 실행할 수 있습니다. 실행 후 다시 사용할 수 없습니다 Javascript의 범위 + 클로저에 대한 자세한 설명

즉시 실행 기호로 실행되는 함수 표현식

함수는 더하기 기호, 빼기 기호 등을 통해 함수 표현식으로 변환될 수 있습니다. #🎜🎜 #

+/-/! function test(){

console.log('a'); }

function test(){
    var arr = [];
    for(var i = 0;i < 10;i ++){
        (function (j){
            arr[j] = function(){
                document.write(j+&#39; &#39;);    
            }
        }(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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