Babel의 함수 호출 재작성: 쉼표 연산자 이해
인기 JavaScript 컴파일러인 Babel은 ES6 코드를 이전 브라우저와 호환되는 버전으로 변환합니다. . 가져온 모듈에서 함수 호출이 발생하면 Babel은 종종 호출 시작 부분에 쉼표 연산자(0,)를 추가합니다. 이 동작은 그 목적에 대한 의문을 제기합니다.
구체적으로 가져오기 함수 호출이 포함된 입력 파일:
import { a } from 'b'; function x () { a() }
Babel은 다음으로 컴파일합니다.
'use strict'; var _b = require('b'); function x() { (0, _b.a)(); }
Babel의 기본 동작은 엄격 모드로 컴파일하는 것이므로 (0,)이 됩니다. 느슨한 모드에서는 함수 호출이 쉼표 연산자 없이 _b.a()로 출력됩니다.
쉼표 연산자 설명
(0,)을 추가하면 다음이 보장됩니다. 가져온 함수는 전역 개체를 this 값으로 사용하거나, 엄격 모드가 활성화된 경우 정의되지 않은 상태로 호출됩니다. 쉼표가 없으면 _b.a()는 _b를 this 값으로 사용하여 호출됩니다.
쉼표 연산자는 첫 번째 표현식(0)을 정의되지 않은 것으로 평가하고 그 결과를 무시합니다. 그런 다음 두 번째 표현식(_b.a)을 평가하고 이를 임시 변수(tmp)에 할당합니다. 마지막으로 전역 개체를 this 값으로 사용하여 임시 변수(tmp())를 호출합니다.
본질적으로 이 기술을 사용하면 호출 컨텍스트의 this 값에 영향을 주지 않고 가져온 함수가 전역적으로 작동할 수 있습니다.
결론
가져온 함수 호출에서 Babel의 쉼표 연산자 사용은 함수가 다음과 관계없이 올바르게 호출되도록 보장합니다. 호출 컨텍스트. 이 기술은 첫 번째 쉼표 표현식 결과를 버리고 전역 개체를 this 값으로 사용하여 임시 변수를 호출하여 구현됩니다.
위 내용은 Babel이 가져온 함수 호출에 쉼표 연산자(0,)를 추가하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!