C/C ++와 비교하여 ECMAScript의 FOR 루프는 로컬 컨텍스트를 생성 할 수 없습니다.
코드 사본은 다음과 같습니다.
for (var k in {a : 1, b : 2}) {
경고 (k);
}
경고 (k); // 루프가 끝났음에도 불구하고 변수 k는 여전히 현재 범위에 있습니다.
언제든지 VAR 키워드를 사용하면 변수를 선언 할 수 있습니다.
위의 과제 설명 :
a = 10;
이것은 단순히 글로벌 객체에 대한 새로운 속성을 만드는 것입니다 (그러나 변수는 아닙니다). "변수"는 변경 될 수 없다는 것을 의미하지는 않지만 ECMAScript 사양의 변수 개념을 준수하지 않으므로 "변수가 아님"(전역 객체의 속성이 될 수있는 이유는 JavaScript에 전 세계 객체가 있기 때문에 전적으로 전 세계 객체가 있기 때문에 변수를 선언하는 것이 아니라 전역 객체에 속성을 추가하는 것이기 때문입니다.
문제를 설명하기 위해 간단한 예를 살펴 보겠습니다
코드 사본은 다음과 같습니다.
if (! ( "a"in window)) {
var a = 1;
}
경고 (a);
우선, 모든 글로벌 변수는 창의 속성이며, 진술 var a = 1; Window.a = 1;
다음 방법을 사용하여 글로벌 변수가 선언되는지 여부를 감지 할 수 있습니다.
창에서 "변수 이름"
둘째, 모든 변수 선언은 범위 범위의 최상위에 있으며 유사한 예를보십시오.
코드 사본은 다음과 같습니다.
경고 ( "a"창에);
var a;
이 시점에서는 선언이 경고 후에 있지만 JavaScript 엔진이 먼저 모든 변수 선언을 청소 한 다음 이러한 변수 선언을 상단으로 이동하기 때문에 경고는 여전히 팝업됩니다. 최종 코드 효과는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var a;
경고 ( "a"창에);
셋째, 질문의 의미는 변수 선언이 발전되었지만이 코드 라인에는 변수 선언 및 변수 할당이 포함되어 있기 때문에 변수 할당은 그렇지 않다는 것입니다.
문을 다음 코드로 나눌 수 있습니다.
코드 사본은 다음과 같습니다.
var a; // 성명
a = 1; // 할당을 초기화합니다
요약하면, 가변 선언 및 할당이 함께 사용되면 JavaScript 엔진은 자동으로 두 부분으로 나누어 변수 선언을 발전시킵니다. 할당 단계는 코드 실행에 영향을 미치고 예기치 않은 결과를 달성 할 수 있기 때문에 진행되지 않습니다.
질문의 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var a;
if (! ( "a"in window)) {
a = 1;
}
경고 (a);
위의 예의 분석에 따르면 변수가 선언 된 경우 선언 된 로컬 변수 전에 VAR을 추가해야합니다. 선언 된 글로벌 변수 인 경우 Var를 추가 할 수 없습니다 (글로벌 변수 수를 제한하고 로컬 변수를 사용하는 것이 가장 좋습니다).
다음은 var를 사용하는 몇 가지 기능에 대해 설명합니다
VAR 문을 사용하여 변수를 여러 번 선언하는 것은 합법적 일뿐 만 아니라 오류를 일으키지는 않습니다.
재사용 된 선언에 초기 값이있는 경우에는 할당 문으로 만 사용됩니다.
재사용 선언에 초기 값이 없으면 원래 변수에 영향을 미치지 않습니다.
VAR 선언이없는 변수는 글로벌 변수로 존재합니다. VAR 선언이있는 변수는 로컬 변수, 특히 내부 기능에 속합니다. 그리고 테스트 후 VAR이 아닌 것보다 VAR로 선언하는 것이 더 빠릅니다. 안전하고 빠른 기능에서 가능한 많은 로컬 변수를 설정하고 가변 작업이 더 합리적이며 기능에서 전역 변수의 임의의 작업으로 인한 논리적 오류는 없습니다.
이 속도는 새로운 방법보다 훨씬 빠르기 때문에 객체를 선언 할 때 객체의 자체 대면 방법을 사용하는 것이 가장 좋습니다.
변수 이름은 혼자서 가져옵니다. 의미와 사양을 관리하기 위해 변수 이름이 약간 길어질 수 있지만 조심하십시오. 변수 이름의 길이는 코드의 실행 속도에도 영향을 미칩니다. 긴 변수 이름 선언은 짧지 않습니다.