Nach diesem Code:Warum hat die innere Funktion in diesem Fall keinen Zugriff auf die äußere Variable?
class Thing {
constructor() {
this.bar = (typeof foo !== "undefined"? foo : null); // (3)
}
static create() {
var foo = arguments[0];
return new Thing();
}
}
die neuen Thing
könnte auf zwei Arten erstellt werden: entweder direkt mit new Thing
oder mit Thing.create()
.
Wenn es auf die zweite Art erstellt wird, wird eine neue Variable string
deklariert. Theoretisch sollte es innerhalb des gesamten Geltungsbereichs bis zur return
-Anweisung sichtbar sein, aber in der Thing.constructor()
(die innerhalb Thing.create()
aufgerufen wird) ist die string
nicht zu sehen. Und Thing.prototype.bar
ist immer null
.
Warum ist es so?
Hier ist aus der inner()
Funktion gesehen:
(function outer() {
var foo = 5;
(function inner() {
alert(foo);
})()
})();
Javascript außerhalb von 'Verwendung strict' Modus aufgerufen einen Bereich Suche durchführen [var Hubwerk] (https: //developer.mozilla.org/de-DE/docs/Web/JavaScript/Referenz/Statements/var) - vielleicht OP ist verwirrt, aber hoffentlich lesen über Schließungen und hissen wird erklären, warum die 'var foo' nicht innerhalb des Konstruktors in dem Aufruf an ist 'create()' – kirinthos
hoppla, es tut mir leid, dass du völlig richtig bist, ich dachte daran, eine Variable zu benutzen, ohne sie zu deklarieren - aber ich habe nichts über das Ändern der Funktionen gesagt, nur dass die Schließung in den Funktionen anders ist Dies erklärt, warum foo im Konstruktor nicht zugänglich ist. – kirinthos
Nebenbei, im zweiten Beispiel sollte 'create' wahrscheinlich an' function Thing' selbst angehängt werden, anstelle des Prototyps von 'Thing'. Ich glaube, so würden die meisten statische Funktionen für möglich halten. – noppa