2017-09-21 6 views
0

背景JavaScriptインタープリタから変数を完全に消去する方法はありますか?

  • 私は完全にJavaScriptインタープリタから変数を一掃したいと思います。
  • deleteキーワードが機能しません。

    > let foo = { }; 
    undefined 
    > delete foo 
    true 
    > foo 
    {} 
    
  • 変数をundefinedに設定すると機能しません。

    > let foo = { }; 
    undefined  
    > foo = undefined 
    undefined 
    > foo 
    undefined 
    > let foo = { }; 
    SyntaxError: Identifier 'foo' has already been declared 
    

質問

  1. は、それは完全にJavaScriptインタープリタから変数を一掃することは可能ですか?
  2. 「はい」の場合は、どうすればよいですか?
+1

「null」に割り当てるだけです。 'delete'はオブジェクトからプロパティを削除するためのものです。 – Fuross

+0

いいえ 'foo = null'に代入して' 'let foo = {};'を再宣言したい場合は、次のエラーを受け取ります: 'SyntaxError:識別子 'foo'は既に宣言されています'、それは完全に一掃されません。 – MaciejLisCK

+1

@Fuross:変数に 'null'を代入しても変数は削除されません。その変数に' null'という値を代入するだけです。 –

答えて

1

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)関数内にある場合は、クロージャを作成せずに関数が返ることを確認してください。すべてのローカル変数は完全に削除されます。

+0

おかげで2人以上のユーザーが半分以上の回答をしている人は全く別の回答を返す – j08691

+1

@ j08691:はい。しかし彼は彼を削除しました。 :-) –

関連する問題