「YUI CompressorでJavascriptを圧縮する | blog.delphinus.dev」で書いた YUI Compressor で Javascript ファイルを圧縮するといつも次のような警告文が出る。
[WARNING] Try to use a single 'var' statement per scope.
ググって調べてみると次のリンクがヒットした。
Try to use one var statement per scope in JavaScript
http://wonko.com/post/try-to-use-one-var-statement-per-scope-in-javascript
つまり、一つのスコープ内で複数の var
を使うのはリソースの無駄になるというのだ。リンク先のをそのままコピーすると、
悪い例
function getElementsByClassName(className, tagName, root) { var elements = []; var root = root || document; var tagName = tagName || '*'; var haystack = root.getElementsByTagName(tagName); var regex = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)'); for (var i = 0, length = haystack.length; i < length; ++i) { var el = haystack[i]; if (el.className && regex.test(el.className)) { elements.push(el); } } return elements; }
良い例
function getElementsByClassName(className, tagName, root) { root = root || document; tagName = tagName || '*'; var elements = [], haystack = root.getElementsByTagName(tagName), length = haystack.length, regex = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)'), el, i; for (i = 0; i < length; ++i) { el = haystack[i]; if (el.className && regex.test(el.className)) { elements.push(el); } } return elements; }
記事のコメントには、こんな最適化じゃ目に見える差なんて出ないよ、なんて意見もあり、どちらが正しいのかよくわからない。しかし、関数の一番最初で変数を全部宣言するなんて、いかにも古臭い言語という感じでなんかやだな。