私はJavaScriptプログラミングスタイルについて考えていましたが、暗黙のグローバルを使用するという簡単に犯される間違いを防ぐために、構文糖衣構文を少し追加するのが理にかなっているのではないかと考えていました。
var OuterFunction = function() { // closure container
var renamedCounter = 0; // someone renamed counter,
this.resetCounter = function () {
counter = 0; // ... but forgot to check the inner functions as well.
return this;
};
return this;
}
この例では、counterは突然グローバル変数になり、のインスタンスにローカルスコープされる変数になりますOuterFunction
。
クロージャでキャプチャされた変数を「宣言」することで、割り当てずvoid
に使用する他のコードと同様に、自由なアサーションを取得できます。 counter
this.resetCounter = function () {
void counter; // this will throw an Error if counter is not in scope.
counter = 0;
return this;
};
編集:jleedevが指摘したように、変数名自体を使用するだけで、変数名が存在するかどうかをテストするようです。
this.resetCounter = function () {
counter;
counter = 0;
return this;
};
同様に機能します。
私が見る利点は次のとおりです。
- 書くのは短いです。
- ある程度、変数宣言のように見えます。
- 追加のために編集:一貫して行われると、構文チェッカー(肉またはプログラム)がこの種のエラーを見つけるのが非常に簡単になります。
一方で:
- ややこしい。コードは実際には何もしません。
- 将来の通訳者は、それを無意味で副作用のないコードとして見つけ、最適化する可能性があります。
私が見落としている側面はありますか?これはばかげた考えですか、それとも少なくともある程度防御可能ですか?
質問者の編集:これはコミュニティWikiの質問である必要がありますが、それに変更するためのチェックボックスが表示されません。ぼんやりと覚えています。
壮大な愚かさのために編集:もちろん、+=
インクリメントする前に式の値を取得しようとします。そのため、少し意味があるように、例の名前をresetCounter
ではなくに変更しました。incrementCounter