>웹 프론트엔드 >프런트엔드 Q&A >es6에 도입된 범위

es6에 도입된 범위

WBOY
WBOY원래의
2022-05-05 15:44:221718검색

es6에서는 "블록 수준 범위"가 도입되었습니다. es6에는 전역 범위와 함수 범위만 있습니다. 중괄호 쌍으로 구성된 범위는 블록 수준 범위입니다. 명시적으로 허용됨 함수를 선언할 때 함수 선언문은 let처럼 동작하며 블록 수준 범위 외부에서 참조할 수 없습니다.

es6에 도입된 범위

이 튜토리얼의 운영 환경: Windows 10 시스템, ECMAScript 버전 6.0, Dell G3 컴퓨터.

es6에 도입된 범위

ES6에는 블록 수준 범위에서 함수를 명시적으로 선언할 수 있는 블록 수준 범위가 도입되었습니다. ES6에서는 블록 수준 범위에서 함수 선언문이 let처럼 동작하며 블록 수준 범위 외부에서 참조될 수 없다고 규정합니다.

ES6 표준에서 한 쌍의 중괄호로 구성된 범위는 블록 수준 범위입니다.

ES5에서는 함수는 최상위 범위와 함수 범위에서만 선언할 수 있고 블록 수준 범위에서는 선언할 수 없다고 규정합니다.

ES5에는 전역 범위와 기능 범위만 있고 블록 수준 범위가 없으므로 불합리한 시나리오가 많이 발생합니다.

(1) 내부 변수는 외부 변수를 재정의할 수 있습니다.

    var tmp = new Date();
    function f() {
        console.log(tmp);
        if (false) {
            var tmp = 'hello world';
        }
    }
    f();//undefined

(2) 카운트에 사용된 루프 변수가 전역 변수로 유출됩니다

    var s = 'hello';
    for (var i = 0; i < s.length; i++) {
        console.log(s[i]);//h e l l o
    }
    console.log(i);//5

변수 i는 루프를 제어하는 ​​데에만 사용되지만 루프가 끝난 후에도 사라지지 않고 전역 변수로 유출됩니다.

예는 다음과 같습니다.

// 浏览器的 ES6 环境
function f() { console.log(&#39;I am outside!&#39;); }
(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log(&#39;I am inside!&#39;); }
  }
  f();
}());
// Uncaught TypeError: f is not a function

ES6 표준에서는 블록 수준 범위에서 함수를 선언하면 해당 함수 선언은 var에서 선언한 변수로 간주되어 최상위로 승격됩니다. 블록 수준 범위이며 함수는 변수 이름으로만 선언되며 함수 본문은 선언하지 않습니다. 위 코드는

// 浏览器的 ES6 环境
function f() { console.log(&#39;I am outside!&#39;); }
(function () {
  var f = undefined;
  if (false) {
    function f() { console.log(&#39;I am inside!&#39;); }
  }
  f();
}());
// Uncaught TypeError: f is not a function

[관련 권장 사항: javascript video tutorial, web front- 끝]

위 내용은 es6에 도입된 범위의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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