In diesem Artikel wird der Unterschied zwischen Variablendeklarationen in JavaScript mit und ohne Var erläutert. Der Umfang von Variablendeklarationen in JS basiert auf Funktionen, daher sehen wir häufig die Methode zur Vermeidung globaler Variablenverschmutzung
(function(){ // ... })();
Innerhalb einer Funktion sind mit var und ohne var deklarierte Variablen unterschiedlich. Mit „var“ deklarierte Variablen sind lokale Variablen, und solche ohne „var“ sind globale Variablen, sodass Sie damit Schnittstelleninhalte der Außenwelt zugänglich machen können.
Wenn eine Variable im globalen Bereich deklariert wird, sieht sie mit oder ohne var gleich aus. Wir wissen, dass die deklarierte globale Variable das Attribut von window ist. Unabhängig davon, ob es dasselbe ist oder nicht, verwenden wir die von ECMAScrpit5 bereitgestellte Attributabfragemethode aus. Unterschied.
var fff = 2; window.ffa = 3; ffb = 4; this.ffc = 4; var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true
Durch das Obige haben wir festgestellt, dass es immer noch einen Unterschied gibt. Verwenden wir delete, um das Attribut zu löschen, um zu überprüfen, ob das Attribut mit der Konfigurierbarkeit „false“ nicht gelöscht werden kann. Das heißt, die Attribute des über die Variable var deklarierten globalen Objekts können nicht gelöscht werden. Wir werden auch feststellen, dass die Attribute des durch die Funktionsdeklaration erstellten globalen Objekts nicht gelöscht werden können.
delete fff; // 无法删除 delete ffa; // 可删除 delete ffb; // 可删除 delete ffc; // 可删除
Die Schlussfolgerung ist, dass es einen Unterschied zwischen der Deklaration globaler Variablen mit var und ohne var gibt.
Es ist legal und harmlos, var-Anweisungen zu verwenden, um Deklarationsanweisungen zu wiederholen. Wenn die Anweisung mit einer Zuweisung wiederholt wird, unterscheidet sie sich nicht von einer normalen Zuweisungsanweisung. Wenn Sie versuchen, eine nicht deklarierte Variable zu lesen, meldet JS einen Fehler.
Im Funktionsumfang von JavaScript sind deklarierte Variablen oder interne Funktionen im Funktionskörper sichtbar. Das bedeutet, dass die Funktion möglicherweise verfügbar ist, bevor sie definiert wird. Es gibt zwei Möglichkeiten, eine Funktion zu definieren: Eine ist ein Funktionsdefinitionsausdruck und die andere ist eine Funktionsdeklarationsanweisung.
// 函数定义表达式 var fns = function (){ // ... }; // 函数声明语句 function fns(){ // ... }
Funktionsdeklarationsanweisungen werden an die Spitze des externen Skripts oder des externen Funktionsbereichs „vorgerückt“, sodass eine auf diese Weise deklarierte Funktion durch Code aufgerufen werden kann, der vor ihrer Definition erscheint. In Funktionsdefinitionsausdrücken erfolgt die Deklaration von Variablen, die Zuweisung zu Variablen jedoch nicht. Daher können in Ausdrücken definierte Funktionen nicht aufgerufen werden, bevor die Funktion definiert ist.
(function() { testa(); // 打印出testa testb(); // 报错:提示undefined is not a function console.log(testc); //undefined,如果移到上面就可以了 function testa() { console.log("testa"); } var testb = function() { console.log("tesb"); } var testc = "testc"; })();
Natürlich müssen wir uns bei der Deklaration von Variablen und Funktionen an die grundlegenden Spezifikationen halten. Variablen und Funktionen müssen im Voraus deklariert werden.