>  기사  >  웹 프론트엔드  >  자바스크립트 변수선언에 대한 깊은 이해_기본지식

자바스크립트 변수선언에 대한 깊은 이해_기본지식

WBOY
WBOY원래의
2016-05-16 16:30:501453검색

C/C와 비교하여 ECMAScript의 for 루프는 로컬 컨텍스트를 생성할 수 없습니다.

코드 복사 코드는 다음과 같습니다.

for (var k in {a: 1, b: 2}) {
경고(k);
}

alert(k); // 루프가 종료되었지만 변수 k는 여전히 현재 범위에 있습니다.
언제든지 변수는 var 키워드를 통해서만 선언할 수 있습니다.

위의 할당문:

a = 10
이는 단순히 전역 객체에 새로운 속성을 생성합니다(그러나 변수는 아닙니다). "변수가 아니다"는 것은 변경할 수 없다는 뜻이 아니라, ECMAScript 명세의 변수 개념에 맞지 않는다는 뜻이므로 "변수가 아니다"(전역객체의 속성이 될 수 있는 이유) 이는 전적으로 JavaScript 객체에 전역이 있기 때문에 이 작업은 변수를 선언하는 것이 아니라 전역 객체에
속성을 ​​추가하는 것입니다.
문제를 설명하는 간단한 예를 살펴보겠습니다

코드 복사 코드는 다음과 같습니다.

if (!(창의 "a")) {
var a = 1;
}
경고(a)

우선 모든 전역 변수는 window의 속성입니다. var a = 1은 window.a = 1;
전역 변수가 선언되었는지 확인하려면 다음 방법을 사용하면 됩니다

창의 "변수 이름"

둘째, 모든 변수 선언은 범위의 최상위에 있습니다. 비슷한 예를 살펴보세요.



코드 복사 코드는 다음과 같습니다.
경고(창의 "a");


이때 선언이 경고 이후에 발생하더라도 경고는 여전히 true로 표시됩니다. 이는 JavaScript 엔진이 먼저 모든 변수 선언을 스캔한 다음 이러한 변수 선언을 최종 코드로 이동하기 때문입니다. 효과는 이렇습니다:

코드 복사 코드는 다음과 같습니다.
var a;
경고(창의 "a")

셋째, 이 질문의 의미는 변수 선언은 고급이지만 변수 할당은 고급이 아니라는 점을 이해해야 합니다. 이 코드 줄에는 변수 선언과 변수 할당이 포함되어 있기 때문입니다.


문을 다음과 같은 코드로 분할할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
var a; //선언
a = 1; //초기화 할당

정리하자면, 변수 선언과 할당을 함께 사용하면 자바스크립트 엔진이 변수 선언을 진행하기 위해 자동으로 두 부분으로 나누어 할당 단계를 진행하지 않는 이유는 변수 선언에 영향을 줄 수 있기 때문입니다. 코드 실행 예상 결과.


질문의 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
var a;
if (!(창의 "a")) {
a = 1;
}
경고(a)


위 예시 분석에 따르면, 변수 선언 시에는 선언된 로컬 변수 앞에 var를 추가해야 합니다. 글로벌 변수를 선언할 경우에는 var를 추가하지 않아도 됩니다(변수 수를 제한하는 것이 가장 좋습니다. 전역 변수를 사용하고 지역 변수를 사용해 보세요)

다음은 var 사용의 여러 기능을 설명합니다

var 문을 사용하여 변수를 여러 번 선언하는 것은 합법적일 뿐만 아니라 오류도 발생하지 않습니다.
재사용된 명령문에 초기 값이 있는 경우 이는 단순히 할당 명령문처럼 작동합니다.
초기값 없이 선언을 재사용하면 원래 변수에 아무런 영향을 미치지 않습니다.
var 없이 선언된 변수는 전역 변수로 존재합니다. var로 선언된 변수는 특히 함수 내에서 지역 변수입니다. 게다가 테스트 후에는 var를 사용하여 선언하는 것이 var를 사용하지 않는 것보다 빠릅니다. 함수에 로컬 변수를 최대한 많이 설정하면 안전하고 빠르며 함수 내 전역 변수의 무작위 조작으로 인해 변수 연산이 더 합리적으로 발생하지 않습니다.

객체를 선언할 때는 새로운 방식보다 훨씬 빠른 객체의 자기 얼굴 방식을 사용하는 것이 가장 좋습니다.

변수 이름은 의미와 사양을 고려하여 변수 이름이 약간 길어질 수 있지만 변수 이름의 길이도 코드 실행 속도에 영향을 미치므로 주의하세요. 긴 변수 이름을 사용한 선언은 짧은 변수 이름만큼 빠르게 실행되지 않습니다.

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