javascript는 전역 변수와 암시적 전역 변수의 차이점을 표시합니다.

高洛峰
풀어 주다: 2017-02-11 15:50:48
원래의
1027명이 탐색했습니다.

이 글에서는 자바스크립트 표시 전역 변수와 암시적 전역 변수의 차이점을 주로 소개합니다. 필요한 친구들이 참고하면 됩니다.

자바스크립트에서는 전역 변수를 선언하는 방법이 두 가지가 있습니다

  • var를 사용하여 선언된 전역 변수 표시

  • var 없이 선언된 암시적 전역 변수

둘의 차이점은 다릅니다.

먼저 코드를 살펴보세요

var a = 'a'; // 显式声明的全局变量
b = 'b'; // 隐式声明的全局变量
 
console.log(a); // a
console.log(b); // b
console.log(window.a); // a
console.log(window.b); // b
로그인 후 복사

js에서는 전역 변수가 실제로 전역 객체(window) 속성, 두 가지 방법으로 선언된 전역 변수는 window

delete를 사용하여 삭제해 보세요.

// 显式声明的全局变量不能被删除
delete a; // 返回 false 
 
// 隐式声明的全局变量可以被删除
delete b; // 返回 true 
 
// 删除情况
console.log(typeof a); // string
console.log(typeof b); // undefined
로그인 후 복사

delete 연산자는 객체의 속성을 삭제할 수 있지만 속성이 구성 불가능한 속성인 경우 삭제 시 false를 반환합니다(엄격 모드에서는 예외가 발생합니다)

이것은 이는 var로 선언된 변수를 사용하여 구성할 수 없다는 것을 의미합니다. getOwnPropertyDescriptor를 사용하여 속성 특성을 설명하는 객체를 가져와 이를 확인하세요.

Object.getOwnPropertyDescriptor(window, a); // {value: "a", writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, b); // {value: "b", writable: true, enumerable: true, configurable: true}
로그인 후 복사

둘 사이의 근본적인 차이점은 다음과 같습니다. 명시적 선언 변수는 구성 가능하지 않으며 삭제 연산자를 통해 삭제할 수 없습니다

구성 가능한 값이 false이면 속성 특성을 설명하는 객체를 수정할 수 없으므로 선언된 전역 변수를 변경할 수 없습니다. 속성 설명자를 수정하여 표시됩니다. 삭제로 삭제할 수 있지만, 반대로 암시적으로 선언된 전역 변수는 삭제로 삭제할 수 없습니다.

b = 'b';
var descriptor = Object.getOwnPropertyDescriptor(window, b);
descriptor.configurable = false;
Object.defineProperty(window, b, descriptor);
delete b; // 返回 false
로그인 후 복사

다음은 기타 항목에서 추가된 내용입니다. 네티즌

JavaScript의 전역 변수와 암시적 전역 변수

암시적 전역 변수와 명시적으로 정의된 전역 변수에는 약간의 차이가 있는데, 이는 삭제 연산자를 통해 변수를 정의되지 않은 상태로 두는 기능입니다.

1. var를 통해 생성된 전역 변수(함수 이외의 프로그램에서 생성)는 삭제할 수 없습니다.
2. var 없이 생성된 암시적 전역 변수는(함수 생성 여부와 관계없이) 삭제될 수 있습니다.

이는 기술적으로 암시적 전역 변수가 실제 전역 변수는 아니지만 전역 개체의 속성임을 보여줍니다. 속성은 삭제 연산자를 통해 삭제할 수 있지만 변수는 삭제할 수 없습니다.

// 定义三个全局变量
var global_var = 1;
global_novar = 2; // 反面教材
(function () {
  global_fromfunc = 3; // 反面教材
}());
 
// 试图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
 
// 测试该删除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
로그인 후 복사

브라우저에서 전역 개체는 창 속성을 통해 코드의 어느 곳에서나 사용할 수 있습니다. 위치 액세스(window라는 지역 변수를 선언하는 등 터무니없는 작업을 수행하지 않는 한) 그러나 다른 상황에서는 이 편의 속성을 다른 이름으로 부를 수도 있습니다(또는 프로그램에서 사용할 수 없는 경우도 있음). 하드 코딩된 창 식별자 없이 전역 개체에 액세스해야 하는 경우 모든 수준의 함수 범위에서 다음을 수행할 수 있습니다.

var global = (function () {
  return this;
}());
로그인 후 복사

This This 메서드 전역 객체는 언제든지 함수 내에서 함수로 호출되고(new를 통해 생성되지 않음) 전역 객체를 얻을 수 있으며 이는 항상 전역 객체를 가리킵니다. 실제로 이 버그는 ECMAScript 5 엄격 모드에는 적용되지 않으므로 엄격 모드에서는 다른 형식을 취해야 합니다. 예를 들어 JavaScript 라이브러리를 개발하는 경우 코드를 즉시 함수로 래핑한 다음 전역 범위에서 이에 대한 참조를 직접 함수의 매개 변수로 전달할 수 있습니다.

위는 자바스크립트 표시 전역 변수와 암시적 전역 변수의 차이점입니다. 이 둘의 근본적인 차이점은 명시적으로 선언된 변수는 구성할 수 없으며 삭제 연산자를 통해 삭제할 수 없다는 것입니다.

더 보기 javascript display 전역 변수와 암시적 전역 변수의 차이점에 대한 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿