>웹 프론트엔드 >JS 튜토리얼 >Babel이 가져온 함수 호출에 쉼표 연산자(0,)를 추가하는 이유는 무엇입니까?

Babel이 가져온 함수 호출에 쉼표 연산자(0,)를 추가하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-30 19:36:13760검색

Why Does Babel Add a Comma Operator (0,) to Imported Function Calls?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.