シャドーイングと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/