コードのネストを無視して動的にスコープを覆い隠す方法について
var a = 0; var fun = function (arg) { if (arg) { eval ("var a = 1;"); // exp.1 } print ("a : " + a); }; fun (true); // a : 1 fun (false): // a : 0
という方法を紹介しましたけど,実はこういう風にやる方が普通っぽい.わからないけど.
var a = 3; var fun = function (arg) { var a = 4; if (arg) { with (window) { alert (a); } } else { alert (a); } }; alert (fun (true));// 結果 : 3 alert (fun (false));// 結果 : 4
この方が素直.
前回も書いたんだけど,これができても何の役に立つかはよくわからない.
しかも,よくよく考えると,コーディングスタイルとしても,こういう書き方は如何かと思う.
javascriptはレキシカルスコープを持つ言語なので,スコープはあくまでもネストによって解決されるべきではないか?
withのようにスコープのネストの一部をまるまるコンテキストに張り付けるのは
危険だ.
とくに,with (window)などと書くのは実効速度的にも問題があると思う.
コーディングスタイルによって危険なコードは避けることができる.
無駄な危険は極力避けるべきだ.