C 및 Java와 같은 프로그래밍 언어와 달리 JavaScript의 변수는 유형이 없으며 모든 변수 정의는 키워드를 사용합니다. Var :
코드 사본은 다음과 같습니다.
var a;
var m, n;
var x = 42, y = "테스트";
변수에 값을 정의한 후 값을 할당하지 않으면 변수의 값이 정의되지 않습니다. 예를 들어, 위 코드의 세 변수 a, m 및 n의 값은 정의되지 않았습니다.
JS의 변수는 유형이 없으므로 다음과 같은 다른 유형의 값을 동일한 변수에 할당 할 수 있습니다.
코드 사본은 다음과 같습니다.
var b = "온도";
console.log (typeof b); // string
B = 108;
Console.log (typeof b); // 번호
동일한 변수에 대한 다른 유형의 할당 외에도 변수는 JavaScript에서 반복적으로 정의 될 수 있습니다. 이 작업이 완료되면 처음으로 변수 정의 문은 할당 문과 같습니다.
코드 사본은 다음과 같습니다.
var c = "Hello";
Console.log (C); // 안녕하세요
var c = true;
console.log (c); // true
ECMAScript 표준의 엄격한 모드에서 모든 변수 정의에는 VAR 키워드를 사용해야합니다. 엄격한 모드를 사용하지 않으면 JS 프로그램이 정의되지 않은 변수에 값을 할당하면 프로그램은 변수와 동일한 이름, 즉 새로운 글로벌 변수를 생성하는 JS 글로벌 개체에서 속성을 생성합니다. 이 접근법은 많은 문제 (예 : 여러 JS 프로그램 간의 글로벌 변수 오염 등)를 가져 오며, 이는 나중에 유지 보수에 상당한 문제를 일으킬 것입니다. 따라서 실제 개발 과정 에서이 접근법은 가능한 한 많이 피해야합니다.
변수 저장
정의 된 변수가 전역 변수이고 변수 정의 프로세스 중에 VAR 키워드가 사용되지 않으면 변수는 글로벌 오브젝트의 속성으로 존재합니다. 이 (Global Object)의 해당 속성에 액세스하여 얻을 수 있거나 삭제 키워드를 사용하여 글로벌 오브젝트에서 삭제할 수 있습니다.
코드 사본은 다음과 같습니다.
var e = "globalVariableValue"; // 모든 함수 외부에서 정의되면 글로벌 변수이지만 "this"에 저장되지 않습니다.
f = "GlobalVariableValue2";
this.g = "GlobalVariableValue3";
Console.log (this.e); // 정의되지 않은
Console.log (this.f); // globalVariableValue2
Console.log (this.g); // globalvariablevalue3
f 삭제 f;
g 삭제;
Console.log (this.f); // 정의되지 않았습니다
Console.log (this.g); // 정의되지 않은
JavaScript의 각 함수 호출에 대해 JavaScript는 함수에 정의 된 로컬 변수를 저장하는 로컬 객체를 만듭니다. 함수 내에 중첩 된 기능이있는 경우 JavaScript는 이미 정의 된 로컬 객체 내부에 중첩 된 로컬 객체를 정의합니다. 함수의 경우 중첩 된 로컬 객체의 층이있는만큼 중첩 된 기능 정의의 층이 많이 있습니다. 이 로컬 객체를 "함수 호출 객체"(ECMAScript 3의 "Call Object"라고하며 ECMAScript 5에서 "선언 환경 레코드"로 이름이 바뀌었지만 개인적으로 ECMAScript 3의 이름을 이해하기가 더 쉽다고 생각합니다).
글로벌 객체와 달리 JavaScript는 이러한 로컬 객체 (함수 호출 개체)에 액세스 할 수있는 방법을 제공하지 않습니다. 따라서 개발자는 이러한 로컬 객체에서 작동 할 수 없습니다. 그러나 이러한 기능 통화 객체를 이해하는 것은 변수의 범위 및 폐쇄와 같은 JavaScript의 일부 개념을 이해하는 데 큰 도움이 될 것입니다.