私は、コーディングにおける長年の悪い習慣を片付けようとしています: ウィジェットをグローバル スコープに書き込むことです。
私は、Web ページのニュース ロール用に大規模でほとんど自己完結型のスクリプトを作成しましたが、すべてを関数に詰め込んだ後、それがどれほどうまく機能するかにうれしい驚きを感じました...実際にはあまりにもうまくいきました。
不正行為をしていないことを確認するために、スコープが正しいことを確認するために次のコードを書きました。
var story_count = "THIS IS NOT A NUMBER";
console.log(story_count);
touch_roll = function()
{
this.story_count = 0;
}
console.log(story_count);
touch_roll();
console.log(story_count);
これにより、コンソールで次の応答が得られることを完全に期待しています
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
実際、出力が次のようになっていることを知って、私は完全に驚きました。
THIS IS NOT A NUMBER
THIS IS NOT A NUMBER
0
私this
はそれだと思うものではありませんか?研究はあまり役に立ちませんでしたが、私は少し燃え尽きてしまったので、すべて間違って読んでいる可能性が十分にあります. そうでない場合、サイトの既存のビットを台無しにしないように、すべての名前空間をその関数の範囲内に完全に保持するにはどうすればよいですか?
以下のマットの回答に従って、修正されたコードは次のとおりです。
var story_count = "THIS IS NOT A NUMBER";
console.log(story_count);
var touch_roll = new function()
{
this.story_count = 0;
console.log(story_count);
}
console.log(story_count);
touch_roll
として宣言し、Javascriptvar
として関数をインスタンス化することにより、その関数new
をランタイムとしてオブジェクトに評価します (したがってtouch_roll()
、下部の への呼び出しを削除することもできます)。
修正後の出力は次のとおりです。
THIS IS NOT A NUMBER
0
THIS IS NOT A NUMBER