シャドーイングとCoffeeScript
シャドーイングとCoffeeScriptの仕様についてメモです。
シャドーイングとは同じ名前で新しい別の変数を定義する事で、スコープの中で変数名をどかどか使い捨てていく場合に便利です。
var str = 'global'; function local() { var str = 'local'; console.log(str); } local(); // 'local' console.log(str); // 'global'
CoffeeScriptで上記と同じコードを吐きそうなコードを書いてみるとどうなるでしょう?
//CoffeeScript str = 'global' local = () -> str = 'local' console.log(str) local() // 'local' console.log(str) // 'local' ←!?
吐出されたjsを見てみると、なんと!
外側の変数と同じ名前を付けようとした変数にvarが付かず外側の変数を上書きしてしまいます!
CoffeeScriptではシャドーイングが禁止されている仕様だそうです。
(function() { var local, str; str = 'global'; local = function() { str = 'local'; // varが付かない! return console.log(str); }; local(); console.log(str); }).call(this);
CoffeeScriptのシャドーイングは、ハマるポイントなので気をつけましょう。
- 参考サイト
- http://coffeescript.org/