(V8デベロッパーはこちら)短い答えは「はい、いいえ」です。長い答えは複雑です。
let s = '';
の例のように、直接の「変数の型推論」はありません。正確には、次の割り当てはs = 1
になる可能性があるからです。
つまり、最新のJavaScriptエンジン(V8など)が最適化されたコードを生成する基本原理の1つは、プログラムの特定のポイントでどのタイプが見られたかを観察することです。あなたが... = 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はすばやくアクセスするためのものです –