ES6 블록 수준 함수의 의미 이해
소개
ES6의 출현으로, 블록 -레벨 함수 선언은 언어에 귀중한 추가 기능이 되었습니다. 초기 가정에도 불구하고 이러한 함수의 정확한 의미 체계는 엄격한 모드와 엄격하지 않은 모드 간의 구별과 브라우저 호환성 고려 사항을 포함하여 더 넓은 범위를 포괄합니다.
의미
아래 표에는 블록 수준 함수 의미론의 주요 측면:
실행 환경 | 외부 블록 표시 | 블록 상단으로 끌어올림 | TDZ |
---|---|---|---|
비엄격, 웹 확장 없음 | 예, 다음과 같습니다. var | 예 | 없음 |
엄격하고 웹 확장 프로그램 없음 | 아니요 | 예 | 없음 |
비엄격, 웹 확장 프로그램 | 예, var와 같습니다. | 예 | 없음 |
엄격한 웹 확장 | 아니요 | 예, 두 번(함수 및 블록) | 이전에 함수 범위 바인딩이 정의되지 않았습니다. 선언 |
엄격 모드 의미
이 맥락에서 "엄격 모드" 개념은 [[엄격]] 내부 슬롯을 나타냅니다. 함수 자체의 엄격함이 아니라 함수 개체입니다. 따라서 엄격하지 않은 주변 코드 내에서 "use strict"가 포함된 함수 선언과 관련된 코드 조각은 여전히 "엄격하지 않은" 것으로 간주됩니다.
웹 확장
"web 확장"은 "정상적인" 함수 명령문 모양을 가진 엄격하지 않은(엉성한) 코드에만 적용됩니다. 웹 호환성 의미론을 사용하는 엉성한 모드에서 블록 내의 함수 선언은 다음과 같이 처리됩니다.
본질적으로 이 동작으로 인해 동일한 이름을 가진 두 개의 개별 바인딩(하나는 블록 범위이고 다른 하나는 함수 범위)이 생성됩니다.
결론
ES6의 블록 수준 기능은 확장된 기능을 제공하지만 엄격한 모드와 웹 호환성 간의 상호 작용을 포함하여 정확한 의미를 이해하는 것은 적절한 사용을 보장하고 잠재적인 가능성을 방지하는 데 중요합니다. 함정.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3