Is it possible to completely wipe out variable from JavaScript interpreter?
はいといいえ、それは変数に依存し、それがどのように作成されました。グローバルvar
またはlet
変数(またはグローバルconst
)を削除することはできません。 「はい」の場合は、下記を参照してください。
If yes, how to do that?
これは、変数が定義されている場所によって異なります。
1)それはグローバル変数の場合は、let
またはvar
でそれを宣言しません。代わりに、グローバルオブジェクトのプロパティ(グローバルスコープのthis
;ブラウザではグローバルwindow
、NodeJSではglobal
)からアクセスできます。削除する場合は、delete
を使用してください。
window.foo = "bar";
console.log("foo" in window); // true
console.log(foo); // "bar"
delete window.foo;
console.log("foo" in window); // false
console.log(foo); // ReferenceError: foo is not defined
私は緩いモードでは、あなたはまた、単に宣言されていない識別子に割り当てることによって、The Horror of Implicit Globalsに頼ることで(それは私の貧血の小さなブログの記事です)ことを行うことができます注意してください。
foo = "bar";
console.log("foo" in window); // true
console.log(foo); // "bar"
delete foo;
console.log("foo" in window); // false
console.log(foo); // ReferenceError: foo is not defined
しかし、厳密なモードを使用してください。正確には、このような理由から、誤植はそれほど遠くにありません。 :-)
2)関数内にある場合は、クロージャを作成せずに関数が返ることを確認してください。すべてのローカル変数は完全に削除されます。
「null」に割り当てるだけです。 'delete'はオブジェクトからプロパティを削除するためのものです。 – Fuross
いいえ 'foo = null'に代入して' 'let foo = {};'を再宣言したい場合は、次のエラーを受け取ります: 'SyntaxError:識別子 'foo'は既に宣言されています'、それは完全に一掃されません。 – MaciejLisCK
@Fuross:変数に 'null'を代入しても変数は削除されません。その変数に' null'という値を代入するだけです。 –