2017-09-21 30 views
0

HintergrundWie lösche ich Variablen vollständig aus dem JavaScript-Interpreter?

  • ich völlig die Variable möchte von JavaScript-Interpreter auszulöschen.
  • delete Schlüsselwort funktioniert nicht.

    > let foo = { }; 
    undefined 
    > delete foo 
    true 
    > foo 
    {} 
    
  • Einstellung Variable undefined funktioniert nicht.

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

Frage

  1. Ist es möglich, Variable von JavaScript-Interpreter vollständig auszulöschen?
  2. Wenn ja, wie geht das?
+1

Ordnen Sie es einfach "null" zu. 'Löschen' dient zum Löschen von Eigenschaften aus dem Objekt. – Fuross

+0

Nein, es funktioniert nicht, wenn ich null '> foo = null' zuweisen und Variable '> let foo = {}; 'redefinieren will, erhalte ich folgenden Fehler:' SyntaxError: Der Bezeichner' foo 'wurde bereits deklariert ', so ist es nicht vollständig ausgelöscht. – MaciejLisCK

+1

@Fuross: Das Zuweisen von 'null' zu einer Variablen löscht die Variable nicht, sondern nur den Wert 'null'. –

Antwort

1

Is it possible to completely wipe out variable from JavaScript interpreter?

Ja und nein, es ist abhängig von der Variable und wie es erstellt wurde. Sie können eine globale var oder let Variable (oder globale const) nicht entfernen. Für die "Ja" -Fälle, siehe unten.

If yes, how to do that?

Es hängt davon ab, wo die Variable definiert ist:

1) Wenn es eine globale Variable ist, erkläre es nicht mit let oder var; Weisen Sie stattdessen eine Eigenschaft des globalen Objekts zu (this im globalen Gültigkeitsbereich; auch über das globale window auf Browsern oder global auf NodeJS zugänglich). Wenn Sie es entfernen möchten, verwenden Sie 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

ich, dass in losen Modus beachten sollte, können Sie auch tun, dass auf The Horror of Implicit Globals, indem sie sich (das ist ein Beitrag auf meinem anämisch kleinen Blog) von nur einem unerklärten Kennung zuweisen:

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

Aber ... benutzen Sie den strikten Modus, genau aus diesem Grund, also machen Tippfehler es nicht sehr weit. :

2) Wenn es in einer Funktion ist, stellen Sie sicher, dass die Funktion zurückkehrt, ohne irgendwelche Schließungen zu erstellen. Alle seine lokalen Variablen werden dann vollständig entfernt.

+0

Lustig, wie zwei Benutzer mit mehr als einem halben Mil rep jede völlig unterschiedliche Antworten posten – j08691

+1

@ j08691: Yup. Aber er hat seine gelöscht. :-) –

Verwandte Themen