ブロックスコープ - JavaScriptの個人的なメモ(その7)

このメモについて

JavaScriptのメモを個人的にまとめておいたものです。誤りがあればご指摘ください。

with

JavaScriptには、ブロックスコープがありませんが、withを使えば、varやletを使わず、シンプルで美しいブロックスコープを書くことができます。

a = 15;

with( {
  a: 0
}) {
  a = 12; /* この変数aは、上で設定されたプロパティなので、varをつける必要はない */
  a; /* 12 */
};

a; /* 15のまま */

これでvarもletもコードから排除することができました。

グローバル変数をインポート

グローバル変数も次のように指定すれば、ローカル変数として扱えます。

with( {
  a: null,

  /*MathとDateとdocumentはグローバル変数*/
  Math: Math,
  Date: Date,
  document: document
}) {
  Math.sin(0);
  document = null; /* documentはローカルスコープなので問題が起きない */
};

結論

  • ブロックスコープには関数やletのほかに、withを使う方法があります
  • with方式はコードをシンプルに書くことができます

参考資料

JavaScriptブロックスコープを実現する - Days on the Moon

http://nanto.asablo.jp/blog/2006/07/08/437419