es6에서는 "블록 수준 범위"가 도입되었습니다. es6에는 전역 범위와 함수 범위만 있습니다. 중괄호 쌍으로 구성된 범위는 블록 수준 범위입니다. 명시적으로 허용됨 함수를 선언할 때 함수 선언문은 let처럼 동작하며 블록 수준 범위 외부에서 참조할 수 없습니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, ECMAScript 버전 6.0, Dell G3 컴퓨터.
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('I am outside!'); } (function () { if (false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f(); }()); // Uncaught TypeError: f is not a function
ES6 표준에서는 블록 수준 범위에서 함수를 선언하면 해당 함수 선언은 var에서 선언한 변수로 간주되어 최상위로 승격됩니다. 블록 수준 범위이며 함수는 변수 이름으로만 선언되며 함수 본문은 선언하지 않습니다. 위 코드는
// 浏览器的 ES6 环境 function f() { console.log('I am outside!'); } (function () { var f = undefined; if (false) { function f() { console.log('I am inside!'); } } f(); }()); // Uncaught TypeError: f is not a function
[관련 권장 사항: javascript video tutorial, web front- 끝]
위 내용은 es6에 도입된 범위의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!