ES6의 블록 수준 함수의 미묘한 의미 이해
ES6의 블록 수준 함수 도입으로 인해 철저한 관리가 필요한 복잡성이 발생했습니다. 시험. 엄격 모드에서 블록 호이스팅 및 범위 제한 규칙을 따른다는 개념에도 불구하고 선택적 "웹 확장" 조항은 추가적인 복잡성을 만듭니다.
이러한 의미를 명확히 하려면 다음 표를 고려하세요. 다양한 조건에서 블록 수준 함수 선언:
Mode | Web Extensions | Visible Outside Block | Hoisted | TDZ |
---|---|---|---|---|
Non-Strict, No Extensions | No | Yes, as a var | Yes, to Function and Block | Undefined Before Block |
Strict, No Extensions | No | No | Yes, to Block | N/A |
| 비엄격, 확장 포함 | 예 | 예, var | 예, 기능 및 블록에 | 함수 선언 전 정의되지 않음 |
| 엄격함, 확장 포함 | 예 | 예, var | 예, 차단하려면 | N/A |
가장 중요한 차이점은 "엄격 모드"라는 개념에 있습니다. 블록 수준 함수의 맥락에서 엄격 모드는 함수 선언이 포함된 블록이 발생하는 함수(또는 스크립트)의 엄격함을 의미하며 함수의 엄격함이 아닙니다
웹 확장을 사용하는 비엄격 모드에서는 이름이 형식 매개변수나 어휘적으로 선언된 변수와 충돌하지 않으면 블록의 함수 선언이 "정상"인 것으로 간주됩니다. 이러한 경우 추가 var 선언이 바깥쪽 함수 범위에 끌어올려지고 함수 개체는 함수 선언 평가 시 이 변수에 할당됩니다.
이 동작은 다음 코드 구조를 반영합니다.
function enclosing(...) { var compat₀ = undefined; { let compat₁ = function compat(…) { … }; compat₀ = compat₁; } }
따라서 함수는 var 선언과 유사하게 블록 외부에 표시됩니다. 그러나 블록 내에 추가 블록 범위 바인딩이 존재합니다.
엄격 모드에서는 웹 확장에 관계없이 블록 수준 기능이 블록 상단으로 끌어올려지고 해당 블록 내에서 가시성이 제한됩니다.
앞서 언급한 의미 체계가 항상 실제 구현으로 직접 변환되는 것은 아니라는 점에 유의하는 것이 중요합니다. ES6 구현 간의 불일치는 드문 일이 아니며 구현 변형에 관계없이 ES6 사양 자체를 이해하는 것이 중요하다는 점을 강조합니다.
위 내용은 다양한 엄격 모드 및 웹 확장 설정에서 블록 수준 기능은 ES6에서 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!