함수 작용역 향상 및 함수 표현식 지정 이름
//
print(); // print
function print () {
console.log('print');
}
...
print(); //
var print = function () {
console.log('print');
}
...
print(); // print is not defined
let print = function () {
console.log('print');
}
일반적인 상황에서 우리는 let을 사용하여 각종 변수를 정의하지만 호환성을 위해 babel을 사용하여 코드를 디코딩합니다. 디코딩 후 신기한 일이 발생합니다
'use strict';
print();
var print = function print() {
console.log('print');
};
이때 코드는 두 번째 코드와 같이 실행될 수 있다. 이 예는 정상적인 예가 아니다. 오류가 뚜렷하기 때문이다. 그러나 브라우저가 es6를 완전히 지원하기 전에 우리는 변수 향상 문제를 고려해야 한다. 비록 당신이 let을 사용했지만 컴파일러는 그것을 var로 바꾸었다. 그리고 왜 babel이 익명 함수 표현식을 변환할 때 함수 이름을 추가하는지 생각해 보자.
//
var add = function (a, b) {
return a + b;
}
...
//
var add = function my_add (a, b) {
return a + b;
}
나는 이곳이 주로 디버깅을 편리하게 하기 위해서라고 생각한다. 예를 들어 우리가 컨트롤러에add를 입력하는 것이다
//
ƒ (a, b) {
return a + b;
}
...
//
ƒ my_add(a, b) {
return a + b;
}
지금 이 간단한 함수에서 우리는 당연히 이 함수들이 무엇을 하는지 한눈에 알 수 있지만, 만약 함수가 매우 복잡하다면, 당신은 이 함수가 무엇을 하는지 직접 알 수 있습니까?그래서 함수에 설명된 명사를 추가하면 디버깅을 편리하게 할 수 있습니다. 이것도 왜 babel이 변환할 때 함수 이름을 추가하는지 추측합니다. 이것은github의 한 토론에서도 이 문제를 검증했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.