- 51 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 08:04:38.56 ]
- function f(){
if(cond) const x=1; print(x);//!condならundefined } function f2(){ if(cond){ const c=//hogehoge }else{ const c=//fugafuga } //色々長い処理 print(c);//!condならfugafuga } がif(cond){ const x=1; print(x) }else{ const x=undefined; print(x) }かconst x cond ? 1 : undefined;と function f2(){ if(cond){ const c=//hogehoge //色々長い処理 print(c); }else{ const c=//fugafuga //色々長い処理 print(c); } になる。ほかにもconstは最適化のために初期化子必須になったんだけどこれは元々ある変数の初期化を伴わない定義の デフォルトはundefined valueという仕様にesでlet文法作るときのミスで合わせられなくなったせいで未初期化の constはundefined valueに束縛されずに2度目の代入が出来てしまうため、建前は最適化のためと言ってるけど初期化子必須に したせいでconstの値がundefined valueになるときconst c = undefinedかconst c = void(0)としなきゃいけなくなったから cに入る値が実行時まで遅延されて逆に最適化が難しくなってる。globalのプロパティundefinedはundefined valueじゃなくて プロパティだから[[get]]するまで値が確定しないのとvoid(0)も[[call]]しないと確定しないのが原因。 jsの元からある仕様だとconstは初期化いらないから、しない場合はundefined valueに束縛されて定義時に値が確定して最適化出来る。
|

|