Inhaltsverzeichnis
Höhe
Erstklassige Bürger
Objekt
Funktionszusammenfassung
Zusammenfassung Schließen
FAQs über JavaScript -Funktionen (FAQ)
Was ist der Unterschied zwischen "==" und "===" in JavaScript?
Warum hat JavaScript sowohl null als auch undefiniert?
Was ist die Verbesserung im JavaScript?
Was ist der Unterschied zwischen globalen Variablen und lokalen Variablen in JavaScript?
Was ist das Schlüsselwort "dieses" in JavaScript?
Was sind Schließungen in JavaScript?
Was ist der Unterschied zwischen Funktionserklärungen und Funktionsausdrücken in JavaScript?
Was ist der Unterschied zwischen "let", "var" und "const" in JavaScript?
Was ist der Unterschied zwischen Objekten und Arrays in JavaScript?
Was ist der Unterschied zwischen Methoden und Funktionen in JavaScript?
Heim Web-Frontend js-Tutorial Drei JavaScript -Macken, die Java/C -Entwickler wissen sollten

Drei JavaScript -Macken, die Java/C -Entwickler wissen sollten

Feb 20, 2025 am 10:28 AM

Three JavaScript Quirks That Java/C Developers Should Know

Kernpunkte

  • Im Gegensatz zu C oder Java ist JavaScripts Umfang funktionsbasiert und nicht blockbasiert; if for Erhöhung im JavaScript bedeutet, dass Variablen und Funktionserklärungen während der Zusammenstellung auf den oberen Rand ihres eingeschlossenen Umfangs verschoben werden, die Initialisierung jedoch nicht erhöht wird.
  • Funktionen in JavaScript werden als erstklassige Bürger behandelt, was bedeutet, dass sie in Variablen gespeichert werden können, als Parameter übergeben, von anderen Funktionen zurückgegeben werden und Eigenschaften wie Objekte aufweisen.
  • Die
  • -Antage (dynamische Umfangsvariable) in JavaScript wurde veraltet, da sie Laufzeitfehler verursachen und verwirrend ist.
  • with JavaScript unterstützt Verschlüsse, sodass Funktionen nach der Rückkehr auf die Variablen der externen Funktionen zugreifen können, wodurch die Datenschutzdatenschutz verbessert und leistungsstarke Programmiermodi wie Module und private Variablen ermöglicht werden können.
JavaScript kann eine irreführende Sprache sein, sie kann schmerzhaft sein, da es nicht 100% konsistent ist. Es ist bekannt, dass es einige schlechte Teile von
table.sp_table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table.sp_table td, table.sp_table th {
  border: solid 1px #ccc;
  padding: 10px;
  line-height: 1.5;
  text-align: center;
  width: 20%;
}
table.sp_table tr td:first-child {
  font-weight: bold;
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
verwirrenden oder redundanten Funktionen hat, die vermieden werden sollten: Die berüchtigten Aussagen, impliziten globalen Variablen und Vergleichsverhaltensausnahmen sind wahrscheinlich am berühmtesten. JavaScript ist einer der erfolgreichsten Flammengeneratoren in der Geschichte! Abgesehen von den Fehler, die es hat (teilweise in der neuen ECMascript -Spezifikation gelöst), hassen die meisten Programmierer JavaScript aus zwei Gründen: - Dom denken sie fälschlicherweise, dass es der JavaScript -Sprache entspricht, die eine sehr schlechte API hat. - Sie wechselten von Sprachen wie C und Java nach JavaScript. Die Syntax von JavaScript täuschte sie dazu, zu glauben, dass es genauso funktioniert wie diese imperativen Sprachen. Dieses Missverständnis kann zu Verwirrung, Frustration und Irrtum führen.

Deshalb hat JavaScript normalerweise einen schlechteren Ruf als es verdient. In meiner Karriere habe ich einige Muster bemerkt: Die meisten Entwickler mit Java- oder C/C -Hintergründen denken die gleichen Sprachmerkmale in JavaScript und sind völlig unterschiedlich. Dieser Artikel sammelt die problematischsten Sprachmerkmale und vergleicht Java -Ansätze mit JavaScript -Ansätzen, um Unterschiede zu zeigen und Best Practices in JavaScript hervorzuheben. with

Scope

Die meisten Entwickler beginnen JavaScript zu verwenden, weil sie dazu gezwungen sind, und fast alle Entwickler beginnen, Code zu schreiben, bevor sie Zeit damit verbringen, die Sprache zu lernen. Jeder solche Entwickler wurde mindestens einmal von JavaScript Scope täuscht. Da die Syntax von JavaScript der von C-Series (absichtlich) sehr ähnlich ist und die Funktionen der Funktionen trennen, wenn und für mit Zahnspangen, würden die Menschen vernünftigerweise erwarten, dass der Bereich der lexikalischen blockpegel Gibem wirbt. Leider ist dies nicht der Fall. Erstens wird in JavaScript der variable Umfang durch Funktionen und nicht durch Klammern bestimmt. Mit anderen Worten, wenn und für Körper keine neuen Bereiche erzeugen und Variablen, die in ihren Körpern deklariert sind, tatsächlich gefördert werden, d. H. Zu Beginn der innersten Funktion, die es deklariert, ansonsten globaler Umfang erstellt. Zweitens erzwingt die Existenz von with -Anserklärungen den JavaScript -Bereich, um dynamisch zu werden und erst zur Laufzeit zu ermitteln. Möglicherweise sind Sie nicht überrascht zu hören, dass die Verwendung von with Aussagen veraltet wurde: JavaScript ohne with wird tatsächlich eine lexikalische Scoped -Sprache sein, d. H. Der Umfang kann vollständig durch die Betrachtung des Codes bestimmt werden. In JavaScript gibt es vier Möglichkeiten, in den Umfang zu gelangen: - Sprachdefinition: Standardmäßig enthalten alle Bereiche Namen this und arguments. - Formale Parameter: Der Umfang eines (formalen) Parameters, der für eine Funktion deklariert ist, gehört zum Körper der Funktion. - Funktionserklärung. - Variable Deklaration.

Eine andere Komplexität wird durch den impliziten globalen Umfang der variablen Zuordnungen für (implizit) nicht im Schlüsselwort var nicht deklariert. Dieser Wahnsinn wird mit der impliziten Zuordnung des globalen Bereichs zu this Referenzen kombiniert, wenn eine Funktion ohne explizite Bindung aufgerufen wird (mehr im nächsten Abschnitt). Bevor Sie sich mit den Details befassen, können Sie klarstellen, welche guten Muster verwendet werden können, um Verwirrung zu vermeiden: Verwenden Sie strenge Muster ('use strict';) und verschieben Sie alle Variablen und Funktionserklärungen an die Oberseite jeder Funktion Innerhalb für und wenn Blöcke und Funktionen der Funktionen innerhalb dieser Blöcke (dies geht aus verschiedenen Gründen über den Rahmen dieses Artikels hinaus).

Höhe

Erhöhung ist eine vereinfachte Methode zur Erklärung des tatsächlichen Verhaltens von Aussagen. Die geförderte Variable wird zu Beginn der Funktion, die sie enthält, deklariert und in undefined initialisiert. Die Zuordnung findet dann in der tatsächlichen Zeile der ursprünglichen Erklärung statt. Bitte beachten Sie das folgende Beispiel:

table.sp_table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table.sp_table td, table.sp_table th {
  border: solid 1px #ccc;
  padding: 10px;
  line-height: 1.5;
  text-align: center;
  width: 20%;
}
table.sp_table tr td:first-child {
  font-weight: bold;
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie hoch ist der Wert, den Sie für die Konsole erwarten? Würden Sie von der folgenden Ausgabe überrascht sein?

table.sp_table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table.sp_table td, table.sp_table th {
  border: solid 1px #ccc;
  padding: 10px;
  line-height: 1.5;
  text-align: center;
  width: 20%;
}
table.sp_table tr td:first-child {
  font-weight: bold;
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im if -Block deklariert die var -Anweisung keine lokale Kopie der Variablen i, sondern überschreibt die zuvor deklarierte Variable. Beachten Sie, dass die erste console.log Anweisung den tatsächlichen Wert der Variablen i druckt, der in undefined initialisiert wird. Sie können es testen, indem Sie die "use strict"; -Richtlinie als erste Zeile in der Funktion verwenden. Im strengen Modus müssen Variablen vor der Verwendung deklariert werden, aber Sie können überprüfen, ob die JavaScript -Engine aufgrund der Deklaration keine Fehler meldet. Bitte beachten Sie übrigens, dass Sie einen Fehler aufgrund der Neuklarierung var nicht melden: Wenn Sie solche Fehler aufnehmen möchten, sollten Sie einen Linter wie JSHINT oder JSINT besser verwenden, um Ihren Code zu verarbeiten. Schauen wir uns nun ein weiteres Beispiel an, um eine weitere fehleranfällige Verwendung von variablen Deklarationen hervorzuheben:

function myFunction() {
  console.log(i);
  var i = 0;
  console.log(i);
  if (true) {
    var i = 5;
    console.log(i);
  }
  console.log(i);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Obwohl Sie möglicherweise anders erwarten, wird der if Körper ausgeführt, da eine lokale Kopie der Variablen namens test() in der Funktion notNull deklariert wird und durch gefördert wird. Geben Sie auch hier obligatorische Arbeiten ein.

Funktionserklärung und Funktionsausdruck

Erhöhung gilt nicht nur für Variablen, sondern auch

Funktionsausdrücke (es handelt sich tatsächlich um Variablen) und Funktionsdeklarationen werden auch gefördert. Dieses Thema muss sorgfältiger behandelt werden als ich hier, aber in kurzer Zeit verhalten sich Funktionserklärungen in etwa den Funktionsausdrücken, außer dass ihre Erklärungen auf den Beginn ihres Geltungsbereichs verschoben werden. Betrachten Sie das folgende Beispiel, das das Verhalten der Funktionserklärung zeigt:

<code>undefined
0
5
5</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Vergleichen Sie dies nun mit dem folgenden Beispiel, das das Verhalten von Funktionsausdrücken zeigt:

var notNull = 1;
function test() {
  if (!notNull) {
    console.log("Null-ish, so far", notNull);
    for(var notNull = 10; notNull < 20; notNull++) {
      //..
    }
    console.log("Now it's not null", notNull);
  }
  console.log(notNull);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Weitere Informationen finden Sie im Abschnitt "Referenzabschnitt", um diese Konzepte weiter zu verstehen.

mit

Das folgende Beispiel zeigt eine Situation, in der das Zielfernrohr nur zur Laufzeit bestimmt werden kann:

function foo() {
    // 函数声明
    function bar() {
        return 3;
    }
    return bar();

    // 此函数声明将被提升并覆盖之前的声明
    function bar() {
        return 8;
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
Wenn

ein Feld namens y hat, wird die Funktion x foo() zurückgegeben, andernfalls wird 123 zurückgegeben. Diese Codierungspraxis kann die Quelle von Laufzeitfehlern sein. Daher wird dringend empfohlen, die Anweisung y.x zu vermeiden. with

Ich freue mich: ecmascript 6

Die Spezifikation

ecmascript 6 fügt eine fünfte Methode hinzu, um Block-Level-Bereich hinzuzufügen: die

-Antage. Betrachten Sie den folgenden Code: let

function foo() {
    // 函数表达式
    var bar = function() {
        return 3;
    };
    return bar();

    // 变量 bar 已经存在,并且永远不会到达此代码
    var bar = function() {
        return 8;
    };
}
Nach dem Login kopieren
In ECMascript 6 deklariert

im Körper von if let, um eine neue Variable lokal zum i -Block zu erstellen. Als nicht standardmäßige Alternative kann der if -Blocke wie folgt deklariert werden: let

function foo(y) {
  var x = 123;
  with(y) {
    return x;
  }
}
Nach dem Login kopieren
im obigen Code existieren die Variablen

und i nur im Block. Zum Zeitpunkt des Schreibens ist die Unterstützung für j selbst für Chrome begrenzt. let

Umfangszusammenfassung

Die folgende Tabelle fasst den Umfang in verschiedenen Sprachen zusammen:

特性 Java Python JavaScript 警告
作用域 词法(块) 词法(函数、类或模块) 它与 Java 或 C 的工作方式大相径庭
块作用域 let 关键字(ES6) 再一次警告:这不是 Java!
提升 不可能! 仅提升变量和函数表达式的声明。对于函数声明,也会提升定义
函数 作为内置类型 回调/命令模式对象(或 Java 8 的 lambda)
动态创建 evalFunction 对象 eval 存在安全问题,Function 对象可能无法按预期工作
属性 可以具有属性 无法限制对函数属性的访问
闭包 弱化,只读,在匿名内部类中 弱化,只读,在嵌套的 def 中 内存泄漏

Funktion

Ein weiteres sehr missverstandenes Merkmal von JavaScript ist, dass Funktionen, insbesondere in imperativen Programmiersprachen wie Java, kein Konzept von Funktionen gibt. Tatsächlich ist JavaScript eine funktionale Programmiersprache. Nun, es ist keine reine funktionale Programmiersprache wie Haskell - es hat immer noch einen imperativen Stil und fördert die Veränderbarkeit, anstatt nur wie Scala zuzulassen. JavaScript kann jedoch als rein funktionelle Programmiersprache mit Funktionsaufrufen ohne Nebenwirkungen verwendet werden.

Erstklassige Bürger

Funktionen in JavaScript können wie jeder andere Typ behandelt werden, z. B. Zeichenfolge und Nummer: Sie können in Variablen gespeichert, als Parameter an Funktionen übergeben, durch Funktionen zurückgegeben und in einem Array gespeichert werden. Funktionen können auch Eigenschaften haben und dynamisch verändert werden, weil ...

Objekt

Eine sehr überraschende Tatsache für die meisten JavaScript -Neulinge ist, dass Funktionen tatsächlich Objekte sind. In JavaScript ist jede Funktion tatsächlich ein Funktionsobjekt. Funktionskonstruktor erstellt ein neues Funktionsobjekt:

table.sp_table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table.sp_table td, table.sp_table th {
  border: solid 1px #ccc;
  padding: 10px;
  line-height: 1.5;
  text-align: center;
  width: 20%;
}
table.sp_table tr td:first-child {
  font-weight: bold;
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies entspricht fast:

function myFunction() {
  console.log(i);
  var i = 0;
  console.log(i);
  if (true) {
    var i = 5;
    console.log(i);
  }
  console.log(i);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ich sage, sie sind fast äquivalent, da die Verwendung des Funktionskonstruktors weniger effizient ist, anonyme Funktionen erzeugt und keine Schließungen für ihren Erstellungskontext erzeugt. Funktionsobjekte werden immer im globalen Bereich erstellt. Funktion (die Art der Funktion) ist auf dem Objekt integriert. Dies ist leicht zu sehen, indem Sie jede von Ihnen deklarierende Funktion überprüfen:

<code>undefined
0
5
5</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies bedeutet, dass die Funktion Eigenschaften hat und hat. Einige davon werden Funktionen zur Erstellungszeit wie Namen oder Längen zugeordnet. Diese Eigenschaften geben den Namen und die Anzahl der Parameter in der Funktionsdefinition zurück. Betrachten Sie das folgende Beispiel:

var notNull = 1;
function test() {
  if (!notNull) {
    console.log("Null-ish, so far", notNull);
    for(var notNull = 10; notNull < 20; notNull++) {
      //..
    }
    console.log("Now it's not null", notNull);
  }
  console.log(notNull);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aber Sie können sogar neue Eigenschaften für jede Funktion selbst festlegen:

function foo() {
    // 函数声明
    function bar() {
        return 3;
    }
    return bar();

    // 此函数声明将被提升并覆盖之前的声明
    function bar() {
        return 8;
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

Funktionszusammenfassung

Die folgende Tabelle beschreibt Funktionen in Java, Python und JavaScript:

特性 Java Python JavaScript 警告
函数作为内置类型 lambda,Java 8 回调/命令模式对象(或 Java 8 的 lambda)
动态创建 evalFunction 对象 eval 存在安全问题,Function 对象可能无法按预期工作
属性 可以具有属性 无法限制对函数属性的访问

Schließen

Wenn ich gebeten würde, meine Lieblings -JavaScript -Funktion zu wählen, würde ich die Schließung ohne zu zögern auswählen. JavaScript ist die erste Mainstream -Programmiersprache, die Verschlüsse einführt. Wie Sie wissen, haben Java und Python seit langem die Versionen von Schließungen geschwächt, aus denen Sie nur (einige) Werte von geschlossenen Scopes lesen können. In Java bieten beispielsweise anonyme innere Klassen eine schließe Funktionalität mit bestimmten Einschränkungen. Zum Beispiel können die endgültigen lokalen Variablen nur in ihrem Bereich verwendet werden - genauer gesagt können ihre Werte gelesen werden. JavaScript ermöglicht den vollständigen Zugriff auf externe Scoped -Variablen und -Funktionen. Sie können bei Bedarf durch lokale Definitionen gelesen, geschrieben und sogar versteckt werden: Sie können Beispiele für alle diese Fälle im Abschnitt "Scope" sehen. Interessanter ist, dass die in der Schließung erstellte Funktion sich an die Umgebung erinnert, in der sie geschaffen wurde. Durch die Kombination von Schließungen und Funktionsnistungen können Sie externe Funktionen über interne Funktionen zurückgeben, ohne sie auszuführen. Darüber hinaus können Sie lokale Variablen externer Funktionen in der Schließung ihrer internen Funktionen dauern, auch wenn die Ausführung der Funktion, die sie erklärt, beendet ist. Dies ist eine sehr leistungsstarke Funktion, hat aber auch ihre Nachteile, da es eine häufige Ursache für Speicherlecks in JavaScript -Anwendungen ist. Einige Beispiele veranschaulichen diese Konzepte:

table.sp_table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
}
table.sp_table td, table.sp_table th {
  border: solid 1px #ccc;
  padding: 10px;
  line-height: 1.5;
  text-align: center;
  width: 20%;
}
table.sp_table tr td:first-child {
  font-weight: bold;
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die obige makeCounter() -Funktion erstellt und gibt eine andere Funktion zurück, die die von ihm erstellte Umgebung verfolgt. Obwohl die Ausführung von counter beendet ist, wenn die Variable makeCounter() zugewiesen wird, bleibt die lokale Variable i im Abschluss von displayCounter und kann daher in seinem Körper zugegriffen werden. Wenn wir erneut makeCounter ausführen möchten, wird ein neuer Verschluss erzeugt, bei dem der Eintrag für i unterschiedlich ist:

function myFunction() {
  console.log(i);
  var i = 0;
  console.log(i);
  if (true) {
    var i = 5;
    console.log(i);
  }
  console.log(i);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um es interessanter zu machen, können wir die Funktion makeCounter() aktualisieren, um einen Parameter zu akzeptieren:

<code>undefined
0
5
5</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

externe Funktionsparameter werden ebenfalls im Verschluss gespeichert, sodass wir diesmal keine lokalen Variablen deklarieren müssen. Jeder Anruf makeCounter() erinnert sich an den anfänglichen Wert, den wir festgelegt haben, und zählen weiter. Verschlüsse sind für viele grundlegende JavaScript -Muster von wesentlicher Bedeutung: Namespaces, Module, private Variablen, Speicher sind nur die berühmtesten. Lassen Sie uns beispielsweise sehen, wie private Variablen für ein Objekt simulieren:

var notNull = 1;
function test() {
  if (!notNull) {
    console.log("Null-ish, so far", notNull);
    for(var notNull = 10; notNull < 20; notNull++) {
      //..
    }
    console.log("Now it's not null", notNull);
  }
  console.log(notNull);
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Verwenden dieses Musters und mit Verschluss können wir einen Wrapper für den Eigenschaftsnamen erstellen und unsere eigenen Setter und Getter verwenden. ES5 erleichtert dies viel einfacher, da Sie Objekte für ihre Eigenschaften mit Getters und Setter erstellen und den Zugriff auf die Eigenschaften selbst bei feinsten Getreide steuern können.

Zusammenfassung Schließen

Die folgende Tabelle beschreibt Schließungen in Java, Python und JavaScript:

特性 Java Python JavaScript 警告
闭包 弱化,只读,在匿名内部类中 弱化,只读,在嵌套的 def 中 内存泄漏
记忆化模式 必须使用共享对象 可以使用列表或字典 最好使用惰性求值
命名空间/模块模式 不需要 不需要
私有属性模式 不需要 不可能 可能令人困惑

Schlussfolgerung

In diesem Artikel stelle ich drei Merkmale von JavaScript ein, die von Entwicklern aus verschiedenen Sprachen, insbesondere Java und C. oft missverstanden werden, oft missverstanden werden. Insbesondere diskutieren wir Konzepte wie Umfang, Werbung, Funktionen und Schließungen. Wenn Sie sich mit diesen Themen befassen möchten, finden Sie hier eine Liste einiger Artikel, die Sie lesen können: - Umfang in JavaScript - Funktionserklärungen und Funktionsausdrücke - let Anweisungen und let Blöcke

FAQs über JavaScript -Funktionen (FAQ)

Was ist der Unterschied zwischen "==" und "===" in JavaScript?

In JavaScript "==" und "===" sind Vergleichsbetreiber, aber sie arbeiten anders. Der Operator "==" wird als loser Gleichstellungsoperator bezeichnet. Es wird vergleicht, ob die beiden Werte nach der Durchführung einer erforderlichen Typumwandlung gleich sind. Dies bedeutet, dass, wenn Sie eine Zahl mit einer Zeichenfolge mit einem numerischen Literal vergleichen, das wahr zurückgibt. Zum Beispiel wird "5" == 5 wahr zurückgegeben. Andererseits ist "===" ein strenger Gleichstellungsoperator. Es führt keine Typkonvertierung durch. Wenn die beiden Werttypen unterschiedlich sind, gibt es false zurück. Zum Beispiel wird "5" === 5 false zurückgegeben, weil einer eine Zeichenfolge und die andere eine Zahl ist.

Warum hat JavaScript sowohl null als auch undefiniert?

In JavaScript sind Null und Undefined spezielle Werte, die nicht existieren. Sie werden jedoch etwas anders verwendet. Undefiniert bedeutet, dass die Variable deklariert wurde, aber noch nicht zugewiesen wurde. Null hingegen ist ein Zuordnungswert, der keinen Wert oder kein Objekt angibt. Dies impliziert, dass der Wert der Variablen nicht existiert, während undefined bedeutet, dass die Variable selbst nicht existiert.

Was ist die Verbesserung im JavaScript?

Erhöhung ist ein Mechanismus in JavaScript, der Variablen und Funktionserklärungen an die Spitze des eingeschlossenen Umfangs während der Zusammenstellungsphase bewegt. Dies bedeutet, dass Sie Variablen und Funktionen verwenden können, bevor Sie sie deklarieren. Es ist jedoch zu beachten, dass nur Erklärungen gefördert und die Initialisierung nicht gefördert werden. Wenn die Variable nach der Verwendung deklariert und initialisiert wird, wird der Wert undefiniert.

Was ist der Unterschied zwischen globalen Variablen und lokalen Variablen in JavaScript?

In JavaScript können Variablen globale oder lokale Variablen sein. Globale Variablen sind Variablen, die außerhalb jeder Funktion deklariert sind, oder Variablen, die überhaupt mit dem Schlüsselwort "var" deklariert sind. Es kann aus jeder Funktion im Skript zugegriffen werden. Lokale Variablen hingegen sind Variablen, die in einer Funktion unter Verwendung des Schlüsselworts "var" deklariert sind. Es kann nur innerhalb der von ihm ausgelösten Funktionen zugegriffen werden.

Was ist das Schlüsselwort "dieses" in JavaScript?

Das Schlüsselwort "This" in JavaScript ist ein spezielles Schlüsselwort, das sich auf den Kontext des Aufrufens einer Funktion bezieht. Sein Wert hängt davon ab, wie die Funktion aufgerufen wird. In einer Methode bezieht sich "dies" auf das Eigentümerobjekt. Individuell bezieht sich "dies" auf ein globales Objekt. In einer Funktion bezieht sich "dies" auf ein globales Objekt. In einer Veranstaltung bezieht sich "dies" auf das Element, das das Ereignis erhält.

Was sind Schließungen in JavaScript?

Ein Verschluss in JavaScript ist eine Funktion, die auf seinen eigenen Bereich, den Umfang und den globalen Umfang externer Funktionen sowie die Zugriffsfunktionsparameter und -variablen zugreifen kann. Auf diese Weise kann die Funktion in der zurückgegebenen externen Funktion auf Variablen zugreifen, die Variablen im Speicher halten und Datenschutz- und Funktionsfabriken ermöglichen.

Was ist der Unterschied zwischen Funktionserklärungen und Funktionsausdrücken in JavaScript?

In JavaScript können Funktionen in vielerlei Hinsicht definiert werden, von denen zwei Funktionserklärungen und Funktionsausdrücke sind. Eine Funktionserklärung definiert eine benannte Funktion, und die Deklaration wird gefördert, sodass die Funktion vor dem Definieren verwendet werden kann. Ein Funktionsausdruck definiert eine Funktion in einem Ausdruck und wird nicht gefördert, was bedeutet, dass er nicht vor ihrer Definition verwendet werden kann.

Was ist der Unterschied zwischen "let", "var" und "const" in JavaScript?

"let", "var" und "const" werden alle verwendet, um Variablen in JavaScript zu deklarieren, aber sie haben unterschiedliche Umfangsregeln. "var" ist funktionsübergreifend, was bedeutet, dass es nur in den von ihm deklarierenden Funktionen verwendet werden kann. "Let" und "const" werden blockiert, was bedeutet, dass sie nur innerhalb der Blöcke verwendet werden können, die sie deklarieren. Der Unterschied zwischen "let" und "const" besteht darin, dass "let" es Ihnen ermöglicht, Variablen neu zuzuweisen, während "const" dies nicht tut.

Was ist der Unterschied zwischen Objekten und Arrays in JavaScript?

In JavaScript werden Objekte und Arrays verwendet, um Daten zu speichern, sie werden jedoch auf unterschiedliche Weise gespeichert. Ein Objekt ist eine Sammlung von Eigenschaften, bei denen jede Eigenschaft ein Schlüsselwertpaar ist. Ein Schlüssel ist ein Zeichenfolge und ein Wert kann jeder Datentyp sein. Ein Array ist eine spezielle Art von Objekt, die eine Liste von Elementen darstellt. Schlüssel sind numerische Indizes, und Werte können von jedem Datentyp sein.

Was ist der Unterschied zwischen Methoden und Funktionen in JavaScript?

In JavaScript ist eine Funktion ein Codeblock für eine bestimmte Aufgabe, und es handelt sich um eine separate Entität, die bei Bedarf verwendet werden kann. Andererseits ist eine Methode eine Funktion, die einem Objekt zugeordnet ist, oder mit anderen Worten, eine Methode ist eine Eigenschaft eines Objekts als Funktion. Methoden werden auf die gleiche Weise wie gewöhnliche Funktionen definiert, mit der Ausnahme, dass ihnen Werte als Attribute von Objekten zugewiesen werden müssen.

Das obige ist der detaillierte Inhalt vonDrei JavaScript -Macken, die Java/C -Entwickler wissen sollten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1653
14
PHP-Tutorial
1251
29
C#-Tutorial
1224
24
Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Apr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Wie kann man Parallax -Scrolling- und Element -Animationseffekte wie die offizielle Website von Shiseido erzielen?
oder:
Wie können wir den Animationseffekt erzielen, der von der Seite mit der Seite mit der offiziellen Website von Shiseido begleitet wird? Wie kann man Parallax -Scrolling- und Element -Animationseffekte wie die offizielle Website von Shiseido erzielen? oder: Wie können wir den Animationseffekt erzielen, der von der Seite mit der Seite mit der offiziellen Website von Shiseido begleitet wird? Apr 04, 2025 pm 05:36 PM

Diskussion über die Realisierung von Parallaxe -Scrolling- und Elementanimationseffekten in diesem Artikel wird untersuchen, wie die offizielle Website der Shiseeido -Website (https://www.shiseeido.co.jp/sb/wonderland/) ähnlich ist ...

Ist JavaScript schwer zu lernen? Ist JavaScript schwer zu lernen? Apr 03, 2025 am 12:20 AM

JavaScript zu lernen ist nicht schwierig, aber es ist schwierig. 1) Verstehen Sie grundlegende Konzepte wie Variablen, Datentypen, Funktionen usw. 2) Beherrschen Sie die asynchrone Programmierung und implementieren Sie sie durch Ereignisschleifen. 3) Verwenden Sie DOM -Operationen und versprechen Sie, asynchrone Anfragen zu bearbeiten. 4) Vermeiden Sie häufige Fehler und verwenden Sie Debugging -Techniken. 5) Die Leistung optimieren und Best Practices befolgen.

Die Entwicklung von JavaScript: Aktuelle Trends und Zukunftsaussichten Die Entwicklung von JavaScript: Aktuelle Trends und Zukunftsaussichten Apr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Apr 04, 2025 pm 05:09 PM

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

So implementieren Sie die Funktion des Ziell- und Drop-Einstellungsfunktion, ähnlich wie bei VSCODE in der Front-End-Entwicklung? So implementieren Sie die Funktion des Ziell- und Drop-Einstellungsfunktion, ähnlich wie bei VSCODE in der Front-End-Entwicklung? Apr 04, 2025 pm 02:06 PM

Erforschen Sie die Implementierung der Funktion des Bedien- und Drop-Einstellungsfunktion der Panel ähnlich wie VSCODE im Front-End. In der Front-End-Entwicklung wird VSCODE ähnlich wie VSCODE implementiert ...

See all articles