"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > ES6 블록 수준 함수 의미 체계는 엄격 모드와 비엄격 모드에서 어떻게 다르며, 웹 확장은 이에 어떻게 영향을 줍니까?

ES6 블록 수준 함수 의미 체계는 엄격 모드와 비엄격 모드에서 어떻게 다르며, 웹 확장은 이에 어떻게 영향을 줍니까?

2024년 12월 22일에 게시됨
검색:511

How Do ES6 Block-Level Function Semantics Differ in Strict and Non-Strict Modes, and How Do Web Extensions Affect Them?

ES6 블록 수준 함수의 의미 이해

소개
ES6의 출현으로, 블록 -레벨 함수 선언은 언어에 귀중한 추가 기능이 되었습니다. 초기 가정에도 불구하고 이러한 함수의 정확한 의미 체계는 엄격한 모드와 엄격하지 않은 모드 간의 구별과 브라우저 호환성 고려 사항을 포함하여 더 넓은 범위를 포괄합니다.

의미
아래 표에는 블록 수준 함수 의미론의 주요 측면:

실행 환경외부 블록 표시블록 상단으로 끌어올림TDZ
비엄격, 웹 확장 없음예, 다음과 같습니다. var없음
엄격하고 웹 확장 프로그램 없음아니요없음
비엄격, 웹 확장 프로그램예, var와 같습니다.없음
엄격한 웹 확장아니요예, 두 번(함수 및 블록)이전에 함수 범위 바인딩이 정의되지 않았습니다. 선언

엄격 모드 의미
이 맥락에서 "엄격 모드" 개념은 [[엄격]] 내부 슬롯을 나타냅니다. 함수 자체의 엄격함이 아니라 함수 개체입니다. 따라서 엄격하지 않은 주변 코드 내에서 "use strict"가 포함된 함수 선언과 관련된 코드 조각은 여전히 ​​"엄격하지 않은" 것으로 간주됩니다.

웹 확장
"web 확장"은 "정상적인" 함수 명령문 모양을 가진 엄격하지 않은(엉성한) 코드에만 적용됩니다. 웹 호환성 의미론을 사용하는 엉성한 모드에서 블록 내의 함수 선언은 다음과 같이 처리됩니다.

  1. 함수 선언은 어휘 블록의 맨 위로 끌어올려집니다.
  2. var 선언 바깥쪽 함수로 호이스팅되고 정의되지 않은 상태로 초기화됩니다.
  3. 함수 선언이 평가될 때 함수 객체는 함수 범위에 할당됩니다. 변수.

본질적으로 이 동작으로 인해 동일한 이름을 가진 두 개의 개별 바인딩(하나는 블록 범위이고 다른 하나는 함수 범위)이 생성됩니다.

결론
ES6의 블록 수준 기능은 확장된 기능을 제공하지만 엄격한 모드와 웹 호환성 간의 상호 작용을 포함하여 정확한 의미를 이해하는 것은 적절한 사용을 보장하고 잠재적인 가능성을 방지하는 데 중요합니다. 함정.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3