1. JS의 메모리 공간은 두 가지 유형으로 나뉩니다. 스택 메모리와 힙 메모리
스택 메모리 : JS 코드 실행을위한 환경을 제공합니다. 기본 데이터 유형의 값을 저장합니다. -> 글로벌 범위 또는 개인 스코프는 실제로 스택 메모리입니다.
힙 메모리 : 참조 데이터 유형의 값을 저장합니다 (객체는 속성 이름과 속성 값을 저장하고 함수는 함수 본문에 코드를 문자열로 저장합니다).
2. 브라우저가 HTML 페이지를로드하면 먼저 JS 코드 실행에 대한 환경을 제공합니다 -> Global Scope (Global-> Window).
3. JS 코드가 실행되기 전에 브라우저는 자체적으로 몇 가지 작업을 수행해야합니다. 모든 VAR/함수 키워드를 미리 선언하거나 정의합니다 -> "사전 탐색"(변수 사운드)
deMelare-> 브라우저에 var num1과 같은 것이 있다고 말하십시오. 기능 fn;
정의 -> 선언 된 변수 또는 함수에 값을 할당하십시오 (예 : num1 = 12). fn = function () {}
[중요] 변수는 정의되지 않았다고 선언하고 기본값은 정의되지 않은 상태입니다 (정의되지 않음)
4. VAR 및 기능의 처리는 전해 전 단계에서 다릅니다.
var-> 사전 검사가 수행되면 변수는 미리 선언됩니다. 할당 작업은 코드가 실행 된 경우에만 완료됩니다.
function-> 사전 점검 중에 모든 선언 및 정의가 미리 완료됩니다 (코드가 실행되면 직접 건너 뜁니다).
[중요] 처음에는 사전 상영 만 창에서 수행됩니다. FN 함수에 저장된 현재 문자열은 모두 문자열이므로 VAR Total은 실제적인 의미가 없으므로 사전 상영이 수행되지 않습니다-> "사전 상영이 현재 범위에서 발생합니다."
console.log (obj); //-> 정의되지 않은 var obj = {이름 : "Zhang Shanshan", 나이 : 10}; 함수 fn (num1, num2) {// 코드 가이 줄에 실행될 때 직접 건너 뜁니다. 사전 탐색 기간 동안 선언 및 정의를 완료했기 때문입니다. var total = num1 + num2; Console.log (총); } var num1 = 12; fn (num1, 100); // fn을 실행하고, 글로벌 변수 num1의 값을 매개 변수 NUM1에 할당하고, 100을 매개 변수 NUM2에 할당합니다.5. 글로벌 범위에 따라 선언 된 변수는 글로벌 변수입니다.
개인 범위로 선언 된 변수는 개인 변수입니다. 함수의 공식 매개 변수는 또한 개인 변수입니다.
함수에 나타나는 변수가 개인인지 전역인지 여부를 알리는 방법은 무엇입니까?
먼저 공식 매개 변수인지 확인한 다음 개인 범위에서 선언되었는지 확인하십시오 (Vared). 둘 중 하나는 개인 변수입니다. 그런 다음 현재 함수에서 어디에 있는지 상관없이 개인이며, 그것과 글로벌 사이에는 관계가 없습니다. 그 어느 쪽이라면, 그것이 비공개가 아니라는 것을 의미하고, 이전 범위를 검색하십시오 ...
6. 함수가 실행되면 기능 본체의 코드가 실행하도록 새로운 개인 스코프 (스택 메모리)가 형성됩니다.
1) 공식 매개 변수에 값을 할당합니다
2) 개인 범위에 따른 사전 상영
3) 개인 범위에 따른 코드 실행
형성된 새로운 개인 범위는 외부 영향으로부터 내부의 개인 변수를 보호합니다. 기능 의이 보호 메커니즘 -> "폐쇄
차이 : Code가 실행되기 전에 VAR을 가진 사람들은 선언 할 수 있으며 VAR이없는 사람은 미리 선언 할 수 없습니다.
1. 조건이 참인지 아닌지에 관계없이 사전 탐험이 필요합니다.
창 사전 탐험 : var a; -> Window.a; if (! } console.log (a); //-> 정의되지 않았습니다
2. 사전 상영은 "="의 왼쪽에서만 발생하며, 왼쪽만이 사전 상승성이며 오른쪽은 사전 상해가없는 값입니다.
함수 기능의 표현식 기능 : 함수 정의의 일부를 변수 또는 요소 인 이벤트에 값으로 할당하십시오.
사전 탐험시 : var fn; -> fn의 기본값은 정의되지 않았습니다
fn (); //-> undefined () uncught typeerror : fn은 함수가 아닙니다. js && 위의 위의 코드가보고되면 var fn = function () {console.log ( "ok"); }; fn (); 사전 탐색시 : fn = xxxfff000 fn (); //-> "OK"함수 fn () {console.log ( "OK"); } fn (); //-> "OK"함수 fn () {console.log ( "OK"); } fn (); //-> "OK"3. 기능 본문의 반환 아래 코드는 더 이상 실행되지 않지만 아래 코드는 사전 검사에 참여해야합니다. 그리고 반품 뒤에있는 것들을 처리해야하지만, 값으로 반환되기 때문에 사전 탐험은 수행되지 않습니다.
var total = 300; 함수 fn () {console.log (Total); return function sum () {}; // return은 함수의 값을 함수의 외부로 반환하는 것입니다.이 기능은 함수에 해당하는 메모리 주소를 함수 외부에 반환합니다. return xxxfff111; 기능 본문의 리턴 아래 코드는 var total = 10을 실행하지 않습니다. } fn ();4. 익명 함수의 기능은 글로벌 범위에서 사전 설명되지 않습니다.
익명 기능의 자체 실행 기능 : 정의와 실행이 함께 완료됩니다.
(함수 (num) {}) (100);
5. 사전 탐험이 발생하면 이름이 반복되면 한 번만 선언되고 반복되지 않지만 과제는 여전히 반복됩니다.
변수 이름과 함수 이름이 JS의 함수 이름과 동일하면 반복되는 것으로 간주됩니다.
사전 탐색 :
var fn; fn = xxxfff000을 선언합니다. [선언] fn = xxxfff111을 정의하지 마십시오. [선언] do n't + 정의 -> fn = xxxffff111 var fn = 12; // window.fn = 12 함수 fn () {//window.fn=function () {}} 함수 fn () {}위의 것은 편집자가 가져온 JS 사전 탐험에 대한 모든 관련 이해입니다. wulin.com을 더 지원하기를 바랍니다