Was ist der Gültigkeitsbereich von Variablen in JavaScript?
Was ist der Geltungsbereich von Variablen in javascript? Haben Sie den gleichen Umfang Inner-als Gegensatz zu außerhalb einer Funktion? Oder ist es auch egal? Auch, wo sind die Variablen gespeichert, wenn Sie Global definiert?
Hier ist ein weiteres schönes link im Auge zu behalten, dieses Problem: "Erklären JavaScript-Bereich und Schließungen".
Hier ist ein Artikel, der erklärt es sehr schön. Alles, was Sie wissen müssen über die Javascript-variable scope
bereits erwähnt e-book von Kyle Simpson ist verfügbar auf Github, und es sagt Ihnen alles, was Sie wissen müssen über die JavaScript-Bereiche & Verschlüsse. Sie können es hier finden: github.com/getify/You-Dont-Know-JS/blob/master/... Es ist Teil des "you don' T know JS" Buch-Serie, das ist toll für alle, die mehr wissen möchten über JavaScript.
Hier ist ein Artikel, der erklärt es sehr schön. Alles, was Sie wissen müssen über die Javascript-variable scope
bereits erwähnt e-book von Kyle Simpson ist verfügbar auf Github, und es sagt Ihnen alles, was Sie wissen müssen über die JavaScript-Bereiche & Verschlüsse. Sie können es hier finden: github.com/getify/You-Dont-Know-JS/blob/master/... Es ist Teil des "you don' T know JS" Buch-Serie, das ist toll für alle, die mehr wissen möchten über JavaScript.
InformationsquelleAutor lYriCAlsSH | 2009-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke an das beste, das ich tun kann, ist geben Ihnen ein paar Beispiele, um zu studieren.
Javascript-Programmierer sind praktisch geordnet, wie gut Sie verstehen Umfang.
Es kann manchmal sehr Anti-intuitiv.
Ein Global-scoped variable
Lokalen Bereich
Intermediate: Keine solche Sache wie block scope in JavaScript (5; ES6 führt
lassen
)einen.
b.
Intermediate: Objekt Eigenschaften
Erweiterte: Schließung
Erweiterte: Prototyp-basiert Bereich Auflösung
Globalen+Lokalen: Ein zusätzliches komplexen Fall
Dies wird drucken Sie
undefined
und10
eher als5
und10
da JavaScript immer bewegt Deklarationen von Variablen (nicht Initialisierungen) an der Oberseite des Bereichs, so dass der code äquivalent zu:Catch-Klausel-scoped variable
Dies wird drucken Sie
5
,6
,5
. Innerhalb der catch-Klausele
Schatten Globale und lokale Variablen. Aber dieser spezielle Bereich ist nur für die Gefangenen variable. Wenn Sie schreibenvar f;
innerhalb der catch-Klausel, dann ist es genau das gleiche, als wenn Sie definiert hatten es vor oder nach dem try-catch-block.Eine hoch bewertete Antwort, nicht sicher, warum. Es sind nur ein paar Beispiele, ohne richtige Erklärung, dann scheint Sie zu verwirren prototype-Vererbung (d.h. Eigenschaft Auflösung) mit der scope-chain (d.h. variable-Auflösung). Eine umfassende (und richtige) Erklärung der Umfang und die Eigenschaft der Auflösung ist in der comp.lang.javascript FAQ-Hinweise.
Es wird hoch bewertet, denn es ist nützlich und verständlich zu einem breiten Spektrum von Programmierern, kleine catachresis trotz. Den link den du gepostet hast, ist zwar nützlich für einige Profis, ist unverständlich für die meisten Leute schreiben von Javascript heute. Fühlen Sie sich frei zu korrigieren Nomenklatur-Probleme, die durch Bearbeiten der Antwort.
nur Bearbeiten, Antworten, Kleinigkeiten zu reparieren, nicht großen. Änderung "Anwendungsbereich" , "Eigenschaft" wird den Fehler beheben, aber nicht das Problem der Vermischung Vererbung und Umfang, ohne eine sehr klare Unterscheidung.
Wenn Sie eine variable definieren, die in den äußeren Umfang, und dann haben Sie eine if-Anweisung definieren Sie eine variable innerhalb der Funktion mit dem gleichen Namen, selbst wenn, wenn die Abteilung nicht erreicht werden, es ist neu definiert. Ein Beispiel - jsfiddle.net/3CxVm
InformationsquelleAutor Triptych
Javascript verwendet Rahmen Sie, Ketten zu etablieren, die den Rahmen für eine bestimmte Funktion. Typischerweise gibt es einen globalen Bereich und jede Funktion definiert hat seinen eigenen nested scope. Jede definierte Funktion innerhalb einer anderen Funktion hat einen lokalen Bereich, die mit der äußeren Funktion. Es ist immer die position der Quelle, die Definition des Geltungsbereichs.
Ein element in der scope chain ist im Grunde eine Map mit einem Zeiger auf den übergeordneten Bereich.
Beim auflösen einer variable, javascript beginnt am innersten Umfang und die sucht nach außen.
InformationsquelleAutor krosenvold
Variablen Global definiert, haben einen globalen Gültigkeitsbereich. Variablen, die innerhalb einer Funktion beschränkt auf, die Funktion und der Schatten Globale Variablen mit dem gleichen Namen.
(Ich bin sicher, es gibt viele Feinheiten, die echte JavaScript-Programmierer werden in der Lage sein zu zeigen, sich in anderen Antworten. Insbesondere stieß ich auf auf dieser Seite darüber, was genau
this
bedeutet, zu jeder Zeit. Hoffentlich diesen mehr einleitenden link ist genug, um Sie zu erhalten begonnen, aber.)Ich weiß, was du meinst, über Dinge, die uns aus der hand, aber bitte hinzufügen einer Antwort sowieso. Ich habe das oben gerade dabei ein paar sucht... eine Antwort von jemandem geschrieben mit der tatsächlichen Erfahrung ist bound besser zu sein. Bitte korrigieren meine Antwort ist definitiv falsch!
Irgendwie Jon Skeet ist verantwortlich für MEINE beliebteste Antwort auf Stack Overflow.
InformationsquelleAutor Jon Skeet
Old school JavaScript
Traditionell, JavaScript hat eigentlich nur zwei Arten von Möglichkeiten :
Werde ich nicht näher auf dieses, da gibt es schon viele andere Antworten, erklären den Unterschied.
Moderne JavaScript
Den neueste JavaScript-Spezifikationen nun auch eine Dritte Anwendungsbereich :
Wie erstelle ich einen block-scope von Variablen?
Traditionell, erstellen Sie Ihre Variablen wie diese :
Block-scope von Variablen werden wie folgt erstellt :
Also, was ist der Unterschied zwischen Funktionsumfang und block-Bereich?
Um den Unterschied zu verstehen zwischen Funktionsumfang und block scope, sollten Sie den folgenden code :
Hier können wir sehen, dass unsere variable
j
ist nur bekannt, in der ersten for-Schleife, aber nicht davor und danach. Doch unsere variablei
ist bekannt in der gesamten Funktion.Bedenken Sie auch, dass block-Gültigkeitsbereich von Variablen nicht bekannt sind, bevor Sie deklariert sind, weil Sie nicht gehisst. Sie sind auch nicht erlaubt zu deklarieren, die denselben block Gültigkeitsbereich variable, die in dem gleichen block. Dies macht block Gültigkeitsbereich von Variablen weniger fehleranfällig als Global oder funktional Gültigkeitsbereich von Variablen, die gehisst werden, und die produzieren keine Fehler im Fall von mehreren Erklärungen.
Ist es sicher zu bedienen block-scope von Variablen heute?
Ob oder nicht es ist sicher heute benutzen, hängt von Ihrer Umgebung ab :
Wenn Sie schreiben von server-side JavaScript-code (Node.js), Sie können sicher verwenden die
let
- Anweisung.Wenn Sie schreiben clientseitiger JavaScript-code und verwenden Sie eine browser-basierte transpiler (wie Traceur oder babel-standalone - ), Sie können sicher verwenden die
let
Aussage, aber dein code ist wahrscheinlich alles andere als optimal in Bezug auf Leistung.Wenn Sie schreiben clientseitiger JavaScript-code und verwenden Sie eine Node-basierte transpiler (wie die traceur shell-script oder Babel), Sie können sicher verwenden die
let
- Anweisung. Und weil Ihr browser wird wissen nur über die transpiled-code, performance-Nachteile, sollte begrenzt werden.Wenn Sie schreiben clientseitiger JavaScript-code und nicht mit einem transpiler, die Sie benötigen, zu prüfen, browser-Unterstützung.
Diese werden von einigen Browsern, die keine Unterstützung
let
an alle :Wie zu verfolgen, browser-Unterstützung
Für eine aktuelle übersicht, welche Browser unterstützen die
let
- Anweisung, die zur Zeit Ihrer Lektüre dieser Antwort sehen dasKann ich
- Seite.(*) Global und funktional Gültigkeitsbereich von Variablen können initialisiert werden und verwendet werden, bevor Sie deklariert sind, da JavaScript-Variablen sind hochgezogen. Dies bedeutet, dass Erklärungen immer viel zu der Spitze des Bereichs.
(**) Block Gültigkeitsbereich von Variablen nicht gehisst
Das obige Beispiel ist irreführend, Variablen 'i' und 'j' sind nicht bekannt, außerhalb des Blocks. 'Let' Variablen Umfang nur in diesem bestimmten block nicht außerhalb des Blockes. Lassen hat auch andere Vorteile, man kann nicht deklarieren Sie die variable wieder, und es ist halten Sie den lexikalischen scope.
Das war hilfreich, vielen Dank! Ich denke, es wäre noch hilfreich zu sein spezifisch über, was du meinst mit "Modern JavaScript" und "Old school JavaScript"; ich denke, diese entsprechen ECMAScript 6 / ES6 / ECMAScript 2015 und früheren Versionen, jeweils?
Richtig!!!! Wo ich sage "der alten Schule JavaScript", bin ich ineed reden über ECMAScript 5 und in denen bin ich bezieht sich auf "modern JavaScript", bin ich der Einnahme von ECMAScript 6 (aka ECMAScript 2015). Ich glaube nicht, es war wirklich wichtig, ins detail zu gehen hier, obwohl, wie die meisten Menschen möchten einfach nur wissen, (1) was ist der Unterschied zwischen block-Bereich und der Funktionsumfang, (2) welche Browser unterstützt block scope und (3) ob es sicher ist zu verwenden Blockbereich heute für welches Projekt Sie gerade arbeiten. So konzentrierte ich mich meine Antwort auf die Bewältigung dieser Probleme.
Dennoch habe ich soeben einen link zu einem Smashing Magazine Artikel über ES6 / ES2015 für diejenigen, die mehr darüber erfahren möchten, welche features Hinzugefügt wurden, um JavaScript während der letzten paar Jahre... von sonst jemand, der Fragen sich vielleicht, was ich meine mit "modern JavaScript".
InformationsquelleAutor John Slegers
Hier ein Beispiel:
Werden Sie wollen untersuchen, Verschlüsse, und wie man mit Ihnen machen private Mitglieder.
InformationsquelleAutor geowa4
Den Schlüssel, wie ich es verstehe, ist, dass Javascript-Funktion Ebene scoping-vs die weitere gemeinsame C-block scoping.
Hier ist ein guter Artikel zu dem Thema.
InformationsquelleAutor James McMahon
In "Javascript 1.7" (Mozilla-Erweiterung zu Javascript) kann man auch erklären, block-scope von Variablen mit
lassen
- Anweisung:Nein, WebKit unterstützt nicht
let
.Ich denke, die einzige gültige Anwendung für dieses sein würde, wenn Sie wusste, dass alle Kunden wäre mit einem Mozilla-browser wie für ein Unternehmen internes system.
Oder wenn Sie die Programmierung mittels der XUL-framework, Mozilla interface framework, von wo aus man mithilfe von css, xml und javascript.
auch das ist eine schreckliche Idee! Also heute wissen Sie, dass Ihre clients Mozilla benutzt, dann kommt eine neue Notiz, die besagt, dass Sie jetzt mit etwas anderem. I. E. der Grund dafür, warum unsere zahlen-system saugt... Sie verwenden müssen, IE8 und nie IE9 oder IE10 oder Firefox oder Chrome, da es flach aus, wird nicht funktionieren...
InformationsquelleAutor kennytm
Die Idee des scoping-Regeln in JavaScript, wenn Sie ursprünglich entworfen von Brendan Eich kam von der HyperCard Skriptsprache HyperTalk.
In dieser Sprache, die anzeigen gemacht wurden, ähnlich einem Stapel von Karteikarten. Es wurde eine master-Karte bezeichnet als hintergrund. Es war durchsichtig und kann gesehen werden als die Unterste Karte. Alle Inhalte auf dieser base Karte wurde gemeinsam mit Karten gelegt. Jede Karte gelegt, hatte die eigenen Inhalte, die Vorrang hatten gegenüber der vorherigen Karte, aber er hatte immer noch Zugang zu den vor-Karten, wenn gewünscht.
Dies ist genau wie die JavaScript scoping-system konzipiert ist. Es hat nur unterschiedliche Namen. Die Karten in JavaScript sind bekannt als Ausführung KontexteECMA. Jeder dieser Kontexte enthält drei Hauptteile. Eine variable Umgebung, die eine lexikalische Umgebung, und diese verbindlich. Gehen wir zurück zu den Referenz-Karten, die lexikalischen Umgebung enthält alle Inhalte aus vorherigen Karten, die tiefer im stack. Der aktuelle Kontext wird auf die Spitze des Stacks und alle Inhalte erklärt, es wird gespeichert in der variable Umwelt. Die variable Umwelt Vorrang bei der Namenskonflikte.
Die diese Bindung auf das enthaltende Objekt. Manchmal Bereiche oder ausführungskontexte ändern, ohne das mit Objekt ändern, wie in einer Funktion deklariert, wo das enthaltene Objekt kann
window
oder einer Konstruktor-Funktion.Diese Ausführung Kontexten erstellt werden, jederzeit die Kontrolle übertragen wird. Die Kontrolle übertragen wird, wenn der code beginnt, ausführen, und das geschieht in Erster Linie aus der Funktion, der Ausführung.
So, das ist die technische Erklärung. In der Praxis ist es wichtig, daran zu erinnern, dass in JavaScript
Anwendung dieser zu einem der vorigen Beispiele (5. "Verschluss") auf dieser Seite ist es möglich, Folgen Sie den Stapel der Ausführung zusammenhängen. In diesem Beispiel gibt es drei Kontexte in den Stapel. Sie sind definiert durch den äußeren Kontext, der Kontext, in dem sofort aufgerufen wird die Funktion aufgerufen var sechs, und der Kontext, in dem zurückgegebene Funktion in der var sechs die sofort die Funktion aufgerufen.
ich) Der äußere Kontext. Es hat eine variable Umgebung von a = 1
ii) Die IIFE Kontext, es hat eine lexikalische Umgebung von a = 1, sondern eine variable Umgebung von a = 6, die den Vorrang in der stack
iii) Die zurückgebrachten Funktion, Kontext, hat es eine lexikalische Umgebung von a = 6 und das ist der Wert, der auf die in der Warnmeldung, wenn Sie aufgerufen.
InformationsquelleAutor Travis J
1) Es ist eine Globale Geltungsbereich einer Funktion, die den Umfang und das mit und fangen Sie Bereiche. Es gibt keine block-level-Bereich im Allgemeinen für die variable ist-die mit und die catch-Anweisungen hinzufügen, die Namen Ihrer Blöcke.
2) Bereiche sind geschachtelten Funktionen den ganzen Weg zu den globalen scope.
3) Eigenschaften gelöst werden, indem Sie über die Prototyp-Kette. Die with-Anweisung bringt Objekt-Eigenschaft Namen in der lexikalischen Bereich definiert, der mit block.
EDIT: ECMAAScript 6 (Harmony) ist spec ' ed unterstützen lassen, und ich weiß, chrome ermöglicht eine 'Harmonie' flag, so dass es vielleicht unterstützt es..
Lassen, wäre eine Unterstützung für block-level-scoping, aber müssen Sie das Schlüsselwort verwenden, um Sie geschehen.
EDIT: Basierend auf Benjamin für das aufzeigen des mit-und catch-Anweisungen in den Kommentaren, habe ich bearbeitet die post, und fügte hinzu, mehr. Sowohl die mit und die catch-Anweisungen für die Einführung von Variablen in Ihre jeweiligen Blöcke, und dass ist einem block scope. Diese Variablen werden als alias für die Eigenschaften der Objekte übergeben.
EDIT: darstellungsbeispiel:
test1 bezieht sich auf die mit dem block, aber ist alias ein.test1. 'Var test1' erstellt eine neue variable test1 in der oberen lexikalische Kontext (Funktion, oder global), es sei denn, es ist eine Eigenschaft eines-was es ist.
Huch! Seien Sie vorsichtig mit 'mit' -- genau wie var ist ein noop, wenn die variable bereits in der Funktion definiert, es ist auch ein noop mit Bezug auf Namen importiert aus dem Objekt! Ein wenig heads-up auf den Namen bereits definiert wäre viel sicherer. Ich persönlich werde nie mit, weil dieser.
Meine Ohren (Augen) zu öffnen, Benjamin -- Meine Aussagen oben sind, die wie ich schon seit der Behandlung von Javascript scoping, aber Sie basieren nicht auf das Lesen der spec. Und ich hoffe, Sie sind nicht unter Bezugnahme auf die with-Anweisung (das ist eine form von object-scoping), oder Mozilla ' s special 'let' syntax.
Gut,
with
- Anweisung ist, eine form des block-scoping-abercatch
Klauseln sind eine viel häufigere form (Spaß Tatsache, v8 implementiertcatch
mit einemwith
) - das ist so ziemlich die einzigen Formen des block-scoping-Regeln in JavaScript selbst (Funktion, global, try/catch , und Ihre Derivate), die jedoch-host-Umgebungen haben unterschiedliche Vorstellungen von scoping - zum Beispiel inline-events im browser und NodeJS vm-Modul.Benjamin-aus dem, was ich sehe, sowohl mit und fangen nur vorstellen, das Objekt in dem aktuellen Bereich (und damit der Eigenschaften), aber dann, nachdem der entsprechende block endet, werden die Variablen zurückgesetzt. Aber beispielsweise eine neue variable eingeführt, die in einem catch wird der Gültigkeitsbereich der umgebenden Funktion / Methode.
Das ist genau das, was block-scoping bedeutet 🙂
InformationsquelleAutor Gerard ONeill
Fand ich, dass viele Menschen neu in JavaScript haben Schwierigkeiten zu verstehen, dass die Vererbung ist verfügbar standardmäßig in den Sprach-und Funktionsumfang ist das nur im Rahmen, so weit. Ich zur Verfügung gestellt eine Verlängerung um ein verschönerer ich schrieb am Ende des letzten Jahres genannt JSPretty. Die feature-Farben-Funktionsumfang in den code und die Mitarbeiter immer eine Farbe, um alle Variablen in diesem Bereich. Verschluss ist optisch demonstriert, wenn eine variable mit einem Farbe aus einem Bereich verwendet wird, in einem anderen Bereich.
Versuchen, das feature an:
Finden Sie eine demo an:
Anzeigen-code:
Derzeit das feature bietet Unterstützung für eine Tiefe von 16 verschachtelten Funktionen, die aber derzeit nicht die Farbe von globalen Variablen.
InformationsquelleAutor austincheney
JavaScript haben nur zwei Arten von Rahmen :
var
keyword Funktionsumfang., Wenn eine Funktion aufgerufen wird, eine variable scope-Objekt erstellt wird (und enthalten in der scope-chain), gefolgt von Variablen in JavaScript.
Scope-chain -->
a
undouter
Funktion sind auf top-Ebene in der scope-chain.variable scope object
(und enthalten in der scope-chain) Hinzugefügt mit variablerb
drin.Nun, wenn eine variable
a
erforderlich sucht für die nächste variable Umfang und, wenn die variable nicht gibt, als es zu bewegen ' s zum nächsten Objekt der variable scope-chain.in diesem Fall ist das Fenster Ebene.InformationsquelleAutor Anshul
Nur um die anderen Antworten, scope ist eine look-up Liste aller deklarierten Bezeichnern (Variablen), und erzwingt einen strikten Satz von Regeln, wie diese zugänglich sind, um die derzeit ausgeführten code. Diese look-up kann für die Zwecke der Zuweisung an die variable, die eine LHS (linke Seite) verweisen, oder es kann für die Zwecke abrufen seinen Wert, das ist eine RHS (Rechte Seite) verweisen. Diese look-ups sind das, was die JavaScript-engine ist dabei intern, wenn es kompilieren und ausführen von code.
Also aus dieser Perspektive, denke ich, dass ein Bild würde helfen, dass fand ich in den Scopes und Closures ebook von Kyle Simpson:
Zitat aus seiner E-Book:
Eine Sache der Anmerkung, dass ist noch zu erwähnen, "Scope look-up nicht mehr, sobald es findet das erste match".
Diese Idee von "scope Ebenen" erklärt, warum "diese" können sich mit einem neu erstellten Bereich, wenn es nachgeschlagen wird, die in eine verschachtelte Funktion.
Hier ist ein link, der geht in alle diese details, Alles, was Sie wissen wollten über javascript-Bereich
InformationsquelleAutor James Drinkard
den code ausführen. hoffe das gibt eine Idee über scoping -
InformationsquelleAutor Yeasin Abedin Siam
Globalen Gültigkeitsbereich :
Globale Variablen sind genau wie global stars (Jackie Chan, Nelson Mandela). Können Sie auf Sie zugreifen (get-oder set-Wert), aus jedem Teil der Anwendung. Globale Funktionen werden wie Globale events (Silvester, Weihnachten). Sie können den Befehl (call), die Sie von einem beliebigen Teil der Anwendung.
Im Lokalen Bereich :
Wenn Sie in den USA, können Sie wissen, Kim Kardashian, berühmt-berüchtigten Promi - ( irgendwie verwaltet, um die Boulevardzeitungen). Aber die Menschen außerhalb der USA nicht erkennen, Ihr. Sie ist ein lokaler star, gebunden an Ihr Gebiet.
Lokale Variablen wie lokale stars. Sie kann nur auf Sie zugreifen (get-oder set-Wert) innerhalb des Bereichs. Eine lokale Funktion ist, wie lokale Ereignisse - man kann nur ausgeführt wird (Feiern) innerhalb dieses Bereichs. Wenn Sie möchten, um Zugriff von außerhalb des Geltungsbereichs, erhalten Sie einen Hinweis Fehler
Lesen Sie diesen Artikel für in-depth understanding of scope
InformationsquelleAutor KhanSharp
Gibt es FAST nur zwei Arten von JavaScript-Bereiche:
So, alle anderen Blöcke als Funktionen nicht erstellen Sie einen neuen Anwendungsbereich. Das erklärt, warum die for-Schleifen überschreiben äußeren Gültigkeitsbereich von Variablen:
Verwendung von Funktionen statt:
Im ersten Beispiel, gab es keinen block-scope, also die ursprünglich deklarierten Variablen überschrieben wurden. Im zweiten Beispiel, es wurde ein neuer Bereich, aufgrund der Funktion, also den ursprünglich deklarierten Variablen wurden BESCHATTET, und nicht überschrieben.
Dass fast alles, was Sie wissen müssen in Bezug auf JavaScript scoping, außer:
Damit Sie sehen können, JavaScript scoping ist eigentlich sehr einfach, wenn auch nicht immer intuitiv. Ein paar Dinge zu beachten:
Also dieser code:
ist äquivalent zu:
Dies scheint counter-intuitive, aber es macht Sinn aus der Perspektive eines imperativen Sprache-designer.
InformationsquelleAutor jackbean818
Modernen Js, ES6+, '
const
' und 'let
'Sollten Sie mit block-scoping für jede variable, die Sie erstellen, wie die meisten anderen Sprachen.
var
ist veraltet. Das macht Ihren code sicherer und besser verwaltbar.const
sollte verwendet werden, für 95% der Fälle. Es macht, so dass die variable Referenz nicht ändern können. Array, object und DOM-node-Eigenschaften verändern kann-und sollte wahrscheinlichconst
.let
sollte verwendet werden, für jede variable erwartet, die neu zugewiesen werden. Dies umfasst innerhalb einer for-Schleife. Wenn Sie sich jemals ändern Wert jenseits der Initialisierung verwendenlet
.Block scope bedeutet, dass die variable nur innerhalb der Klammern, in denen Sie deklariert ist. Dies erstreckt sich auch auf interne Bereiche, einschließlich anonyme Funktionen in Ihrem Umfang.
InformationsquelleAutor Gibolt
Gibt es die Funktion nur Bereiche, in JS. Nicht block-Bereiche!
Sie können sehen, was ist, zu hissen.
(lange Zeit, da Antwort gepostet ) Block scope ;developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
InformationsquelleAutor koredalin
Versuchen, dieses merkwürdige Beispiel. In dem Beispiel unten, wenn a eine numerische initialisiert auf 0, Sie würde finden Sie 0 und dann 1. Außer einem ist ein Objekt und javascript-pass-f1-Zeiger eher als eine Kopie. Das Ergebnis ist, dass Sie die gleiche Warnmeldung beide Male.
InformationsquelleAutor Mig82
Mein Verständnis ist, dass es 3 Bereiche: global scope, die Global verfügbar sind; lokalen Bereich zur Verfügung, um eine ganze Funktion unabhängig von Blöcken; und block scope, nur die block-Anweisung oder ein Ausdruck, auf dem es verwendet wurde. Globalen und lokalen Bereich sind gekennzeichnet mit dem Schlüsselwort 'var', entweder innerhalb einer Funktion oder außerhalb, und block-Rahmen angezeigt wird mit dem Schlüsselwort 'lassen'.
Für diejenigen, die glauben, es gibt nur Globale und lokale Bereich, erklären Sie bitte, warum Mozilla eine ganze Seite beschreiben die Nuancen der Blockbereich in JS.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
InformationsquelleAutor mrmaclean89
In JavaScript gibt es zwei Arten von Möglichkeiten:
Die Unter-Funktion hat einen lokalen Gültigkeitsbereich variable
carName
. Und diese variable ist von außen nicht zugänglich der Funktion.Den Unten Klasse Global variable
carName
. Und diese variable ist von überall zugänglich in der Klasse.InformationsquelleAutor Abdur Rahman
In EcmaScript5, gibt es vor allem zwei Bereiche, lokalen Bereich und globalen Bereich aber in EcmaScript6 wir haben vor allem drei Bereiche, local scope global scope und einen neuen Bereich namens Blockbereich.
Beispiel der Blockbereich ist :-
InformationsquelleAutor Vivek Mehta
ECMAScript 6 eingeführt, die let und const-keywords. Diese Schlüsselwörter können verwendet werden anstelle von dem Schlüsselwort var. Im Gegensatz zu den var-Schlüsselwort let und const-keywords unterstützen die Deklaration von lokalen Gültigkeitsbereich innerhalb block-Anweisungen.
InformationsquelleAutor Dava
Gibt es zwei Arten von scopes in JavaScript.
Globalen Bereich: variable ist angekündigt, die im globalen Gültigkeitsbereich verwendet werden können überall in das Programm reibungslos. Zum Beispiel:
Funktionsumfang oder Lokalen Rahmen: variable deklariert, in diesem Umfang können Sie in Ihrer eigenen Funktion nur. Zum Beispiel:
InformationsquelleAutor A. Randhawa