(여기 V8 개발자.) 짧은 대답은 "예"입니다. 오랜 대답은 복잡합니다.
let s = '';
예와 같이 직접 "변수에 대한 유형 추정"이 없습니다. 정확하게 다음 할당이 s = 1
일 수 있기 때문입니다.
그런데 현대 자바 스크립트 엔진 (V8 등)이 최적화 된 코드를 생성하는 기본적인 원칙 중 하나는 프로그램의 특정 지점에서 어떤 유형이 표시되었는지 관찰하는 것입니다. 당신이 ... = s + t
, 지금까지 s
및 t
이있을 때 예를 들어, 항상 문자열을 가지고, 다음 최적화 된 코드는 일련의 대략 같은 포함됩니다
check if the value in s is a string, otherwise bail out;
check if the value in s is a string, otherwise bail out;
perform a string concatenation of the two values;
"구제"즉, 전체 기능에 대한 최적화 된 코드 버려지고 유형에 대해 구워진 가정을하지 않는 최적화되지 않은 코드 (또는 바이트 코드)로 실행이 계속됩니다. 새로 최적화 된 코드는 유형에 대한 업데이트 된 정보를 기반으로 나중에 생성되거나 생성되지 않을 수 있습니다. 이 접근법은 보통 "유형 유추"라고 불리는 것이 아닙니다.
JavaScript의 직접 "유형 추론"은 매우 제한된 상황에서만 가능합니다. 예를 들어, 비트 연산 (예 : |
, &
, ~
)의 결과는 항상 32 비트 정수입니다. 단항 더하기 (즉, +foo
)의 결과는 항상 숫자입니다. 문자열을 다른 것에 추가 한 결과는 항상 문자열입니다. 컴파일러 최적화는 일반적으로보다 효율적인 코드를 생성하는 규칙을 적용합니다.
아마 여기에 찾고있는 정보가 포함되어 있습니까? https://www.html5rocks.com/en/tutorials/speed/v8/ –
@Shyam 거의 ... – Hydro
javascript는 빠른 액세스를위한 모든 것을 최적화하는 것입니다 ... –