2017-07-08 4 views
0

Der Code ist unten angegeben:Bitte erläutern Sie die Ausgabe des gegebenen Code

function a() { 
    function makeWorker() { 
     this.ename = "Pete"; 
     return function() { 
      console.log(this); 
      console.log(this.ename); 
     }; 
    } 


    var work = makeWorker(); 
    work(); 
} 
var ename = "John"; 
a(); 

this.name Ausgänge auf „Pete“ .aber ich habe eine andere Variable ename im globalen scope.So definiert, warum Pete ist“ "Drucken statt" John "?. Das Programm läuft im nicht-strikten Modus.

+0

@MiHawk: Wo kommt das Hissen ins Spiel? – Ryan

Antwort

-2

Es gibt verschiedene Bereiche in JavaScript. Die Variable ename wird im Rahmen der Funktion angelegt. Um auf die globalen Bereichsvariablen zugreifen zu können, müssen Sie sie anders benennen.

https://www.w3schools.com/js/js_scope.asp

+0

Um auf die Variable in einem globalen Bereich zuzugreifen, wenn Sie eine Variable im lokalen Funktionsbereich erstellt haben, müssen Sie sie über das Fenster aufrufen. {VariablenName}, in Ihrem Fall window.ename –

+0

Sie sollten niemals einen Kommentar zu Ihrem eigenen schreiben müssen antworten, um Details hinzuzufügen. Sie haben immer (unabhängig vom Ruf) die Möglichkeit, Ihre eigenen Fragen oder Antworten zu bearbeiten. Bitte mach es. –

+0

Diese Antwort ist einfach falsch. Es gibt keine 'ename'-Variable in irgendeinem Funktionsumfang hier. – melpomene

2

makeWorker ist eine Art von redundanten hier, wenn a() ohne this sowieso genannt wird, also lassen Sie uns den Anruf zu makeWorker mit ersetzen, was es tut:

function a() { 
    this.ename = "Pete"; 
    var work = function() { 
     console.log(this); 
     console.log(this.ename); 
    }; 
    work(); 
} 

var ename = "John"; 
a(); 

und ersetzen Sie den Aufruf von work mit was es macht:

function a() { 
    this.ename = "Pete"; 
    console.log(this); 
    console.log(this.ename); 
} 

var ename = "John"; 
a(); 

und replac e den Anruf an a mit dem, was sie tut, wieder unter der Annahme, dass this das globale Objekt ist:

var ename = "John"; 
this.ename = "Pete"; 
console.log(this); 
console.log(this.ename); 

So setzen Sie die globalen ename-"John", setzen Sie sich dann auf "Pete", dann ausdrucken und das Ergebnis ist "Pete". Nichts Seltsames. Es könnte Ihnen helfen, etwas zu protokollieren, wenn jede Zuordnung im ursprünglichen Code geschieht:

function a() { 
 
    function makeWorker() { 
 
     console.log("Setting ename to Pete"); 
 
     this.ename = "Pete"; 
 
     return function() { 
 
      console.log(this.ename); 
 
     }; 
 
    } 
 

 
    var work = makeWorker(); 
 
    work(); 
 
} 
 

 
console.log("Setting ename to John"); 
 
var ename = "John"; 
 
a();

+0

Großartige Erläuterung –

-1

Es sieht aus wie Sie die makeWorker ausgeführt werden, und es ist einfach die Variable ename überschreiben, und Sie wollen, um auf eine globale Variable zuzugreifen.

Überprüfen Sie diesen Artikel. How to access global variable in function hook in javascript?

+0

Wenn alle relevanten Details in Ihrer Antwort in einem Link zu einem anderen SO-Post angegeben sind, sollte diese Frage als Duplikat dieses Posts geschlossen werden. Sie sollten es als solches kennzeichnen. –

+0

Hey Ken, danke für den Kopf! – TheRock

Verwandte Themen