変数のデフォルト設定をちょっとだけ早くする小ネタ

Backbone.jsのコードを眺めていたら、こんなのがあった。(関数名は適当)

function foo(options) {
  options || (options = {});
  // ...
}

ここでやってるのは、optionsが偽だったらObjectで初期化する、という操作だが、次のような書き方の方が一般的だし理解するのも簡単な気がする。

function foo(options) {
  options = options || {};
  // ...
}

なんでわざわざこんな書き方をしているのか(文字数だって増えている!)考えてみたら、後者では必ずoptionsへの代入が行われるのに対し、Backbone.jsの方式ではoptionsが真の場合代入が行われない。その分高速なのだろう。
普段使いのコードでは、こんな最適化は行わなくてもいい気がするけど、覚えておいて損はなさそう。