JavaScript의 범위는 항상 프론트 엔드 개발에서 이해하기 어려운 지식 지점이었습니다. JavaScript의 범위에 대해 몇 마디를 기억하십시오. 당신은 전 세계 여행을 두려워하지 않습니다 ...
1. "JavaScript의 블록 레벨 범위 없음"
Java 또는 C#에는 블록 레벨 범위가 있습니다. 즉, 버팀대도 범위입니다.
public static void main () {if (1 == 1) {문자열 이름 = "7";} system.out.println (name);} // 오류를보고 공개 static void main () {if (1 == 1) {string name = "7";} console.writeline (name);JavaScript의 블록 수준 범위가 없습니다
함수 main () {if (1 == 1) {var name = 'seven';} console.log (name);} // 출력 : 72. JavaScript는 함수 범위를 채택합니다
JavaScript에서 각 기능은 범위로 작용하며 내부 범위의 변수는 외부에서 액세스 할 수 없습니다.
function main () {var innerValue = 'Seven';} main (); console.log (innerValue); // 오류 : uncught referenceError : InnerValue가 정의되지 않았습니다.3. JavaScrip 스코프 체인
JavaScript의 각 함수는 범위이므로 함수 중첩 함수가 나타나면 스코프 체인이 나타납니다.
xo = 'alex'; function func () {var xo = "seven"; funner inner () {var xo = 'alvin'; console.log (xo);} inner ();} func ();예를 들어, 위의 코드는 3 개의 스코프로 구성된 스코프 체인에 나타납니다. 스코프 체인이 나타나면 변수를 찾을 때 순서가 나타납니다. 위의 예를 위해 :
Console.Log (XO)가 실행되면 검색 순서는 스코프 체인의 우선 순위에 따라 내부에서 외부로 검색하는 것입니다. 내부 층이 존재하지 않으면 예외가 발견되지 않을 때까지 점차적으로 조회됩니다.
425762-20160707114743577-37359182.png
4. JavaScript의 스코프 체인은 실행 전에 생성되었습니다
JavaScript의 범위는 실행되기 전에 생성되었습니다. 미래에 실행되면 스코프 체인에 따라 검색하면됩니다.
Example 1:
xo = 'alex'; function func () {var xo = "seven"; function inner () {console.log (xo);} 내부를 반환합니다.} var ret = func (); ret (); // 출력 결과 : 7위의 코드는 함수가 호출되기 전에 이미 존재합니다.
글로벌 범위 -> func 함수 범위 -> 내부 함수 범위
[ret ();]을 실행할 때 내부 함수를 지칭하기 때문에이 함수의 스코프 체인은 다음과 같이 정의되었습니다. Global Scope-> func function scope -> 내부 함수 스코프, [ret ();]을 실행할 때 기존 범위 체인을 기반으로 변수가 발견됩니다.
Example 2:
xo = 'alex'; function func () {var xo = "eirc"; function inner () {console.log (xo);} xo = 'seven'; return 내부;} var ret = func (); ret (); // 출력 결과 : 7위의 코드는 예 1과 동일한 목적을 가지며, 또한 함수가 다음과 같은 범위 체인이 이미 존재한다는 것을 강조합니다.
글로벌 범위 -> func 함수 범위 -> 내부 함수 범위
다르게, [var ret = func ();]을 실행할 때 func 스코프의 XO 변수의 값은 "Eric"에서 "7"으로 재설정되었으므로 [ret ();]를 실행할 때는 "7"만 찾을 수 있습니다.
Example 3:
xo = 'alex'; function bar () {console.log (xo);} function func () {var xo = "seven"; return bar;} var ret = func (); ret (); // 출력 결과 : Alex위의 코드에서는 함수가 실행되기 전에 두 개의 스코프 체인이 생성되었습니다.
글로벌 범위 -> 바 기능 범위
글로벌 범위 -> func 함수 범위
[ret ();]를 실행할 때 Ret는 막대 함수를 지칭하고 막대 함수의 스코프 체인이 이미 존재합니다. Global Scope-> Bar Function Scope, 실행시 기존 스코프 체인을 기반으로 검색됩니다.
5. 미리 진술
변수를 생성하지 않고 JavaScript에서 직접 사용하면 오류 가보고됩니다.
console.log (xxoo); // 오류 : upphed 참조 우리 : xxoo는 정의되지 않았습니다
JavaScript에서 값을 할당하지 않고 값이 생성되면 값은 다음과 같이 정의되지 않습니다.
var xxoo; console.log (xxoo); // 출력 : 정의되지 않은
이것이 함수로 작성된 경우 :
function foo () {console.log (xo); var xo = 'seven';} foo (); // output : undefined위의 코드는 오류를보고하지 않지만 정의되지 않은 출력. 그 이유는 JavaScript 함수가 실행되기 전에 값을 할당하지 않고 모든 변수를 선언하기 때문입니다. 따라서, "사전 컴파일"할 때 함수가 이미 VAR XO를 실행 한 것은 위의 예와 같습니다. 따라서 위의 코드의 출력은 정의되지 않았습니다.
위의 것은 편집자가 5 개의 문장으로 JavaScript Scope (클래식)를 해결하기 위해 소개 한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!