/*
1, 변수 유형:
JavaScript는 약한 유형이고, 변수는 모든 유형을 저장할 수 있으며, 유형은 런타임 중에 가변입니다.
->
*/
/*
2, 변수 선언:
*/
var i
var index; 🎜 >var i = 0, index = 2;
/*
초기값 없이 변수를 선언하면 값이 정의되지 않습니다.
var로 선언된 변수는 delete 연산자를 사용하여 삭제할 수 없습니다.
중복 선언은 재정의를 생성하고 오류를 발생시키지 않습니다.
선언을 생략하면 변수가 암시적으로 선언되어 전역 변수로 사용됩니다.
*/
/*
3, 변수 범위:
함수로 구분: 함수 내에서 선언된 변수, 즉 로컬 변수만 실행할 수 있습니다(클로저는 계속 참조 가능). >내부 변수 비율 전역 변수는 우선순위가 높습니다. 예:
*/
var g = 'global'
function check() {
var g = 'local'; log(g) ; // local
}
check();
/* 가능하면 변수에 대해 var 선언을 사용하세요*/
/* 블록 수준 범위 없음*/
if ( false) {
var test = 2;
function t() {
console.log('t function')
}
t(); function;
console.log(test); // 정의되지 않음
/*
예외:
firefox가 정의되지 않았습니다.
; (선언 및 할당 끝 변수가 모두 정의되지 않음)
*/
/* 변수 선언이 미리 중단됩니다*/
function f() {
console.log(test ); // 정의되지 않음
var test = 'test';
console.log(test) // 'test'
}
//
function f() {
var test;
console.log(test); // 변수는 선언만 되므로 undefine으로 초기화됩니다.
test = 'test'
console.log(test); 변수에 'test' 값이 할당되었습니다.
}
/* 정의되지 않은 변수와 할당되지 않은 변수*/
console.log(t); // 변수 t를 직접 사용합니다.
// 참고: 변수에 직접 값을 할당하면 변수가 암시적으로 전역으로 취급됨;
배열/객체/함수 참조 유형
제5판, 63페이지:
문자열을 기본 유형처럼 동작하는 불변 참조 유형으로 생각할지
또는 다음을 사용하여 구현된 기본 유형으로 생각할지 여부 참조 유형의 내부 함수에서는 결과가 동일합니다.
즉, String 유형은 기본 유형으로 작동합니다.
다음 예에서는 기본 유형과 참조 유형의 차이점을 보여줍니다.
*/
var a = 3.14;
var b = a;
a = 4; // 4, 3.14; [1 , 2, 3];
var b = a;
a[0] = 99
console.log(a, b);
// 배열은 참조형이고, 변수 a와 b는 동일한 메모리 주소를 가리킵니다.
// 변수는 기본형의 실제값을 저장하고, 참조형(클래스)의 참조를 저장합니다. 포인터);
/*
5, 가비지 컬렉션
참조 유형에는 다음과 같은 고정된 크기가 없습니다. 배열, 길이는 언제든지 수정할 수 있습니다.
변수는 직접 수정할 수 없습니다. 참조 값을 저장하지만 특정 위치에 저장되며 saves 변수는 이 위치에 대한 참조일 뿐입니다.
따라서 JavaScript는 엔터티를 저장하기 위해 메모리를 동적으로 할당합니다.
결국 이 메모리는 해제되어야 합니다. 재사용하지 않으면 사용 가능한 메모리가 모두 소모되어 시스템이 중단됩니다.
JavaScript는 메모리 해제를 수동으로 요구하지 않습니다. 가비지 수집이라는 방법을 사용합니다.
객체가 차지하는 메모리를 해제합니다.
*/
var s = 'hello';
var u = s.toUpperCase()
s = u;
// 환경에 더 이상 'hello' 참조가 없습니다. [변수가 이를 가리킵니다]
// (할당 여부에 따라 재활용 여부가 결정됩니다)
/*
6, 속성으로서의 변수
전역 객체
window, this, Math
브라우저에서: navigator, screen
로컬 변수: call object
Call object
전역 변수 특수 전역 객체의 속성인 경우 지역 변수는 호출 객체의 속성이라고 합니다.
함수의 매개변수와 지역 변수는 호출 객체의 속성으로 저장됩니다.
(독립 객체를 사용하여 지역 변수를 저장합니다. JavaScript는 지역 변수가 동일한 이름을 가진 전역 변수의 값을 덮어쓰는 것을 방지합니다.
JavaScript 실행 환경
JavaScript 인터프리터는 함수를 실행할 때 해당 함수에 대한 실행 컨텍스트를 생성합니다.
실행; 컨텍스트는 모든 JavaScript 코드 세그먼트가 실행되는 환경입니다.
어떤 기능도 지정하지 않는 JavaScript 코드 실행 환경은 전역 개체를 사용합니다.
모든 JavaScript 함수는 고유한 실행 환경에서 실행되며 자체 호출 개체가 있습니다. , 호출 개체에 정의된 로컬 변수 사용
JavaScript 인터프리터는 전역 실행 환경의 다양한 실행 스크립트에서 사용할 수 있으며 이러한 환경은 연결이 끊어지지 않고 서로 참조할 수 있습니다
(window-iframe);
변수 범위에 대한 심층적인 이해
각 JavaScript 실행 환경에는 이와 관련된 JavaScript 실행 환경이 있습니다. 범위 체인
범위 체인은 개체 목록 또는 개체 체인입니다.
JavaScript 코드는 변수 X의 값을 쿼리해야 하며 이 체인의 첫 번째 객체를 찾기 시작합니다.
객체에 An 객체라는 속성이 있는 경우...
보충:
f() 범위-> 클로저 범위-> var 변수 범위
-> 객체 클래스 속성 범위
*/