この記事では、JavaScriptのVARとNO VARの違いについて説明します。 JSの変数宣言の範囲は機能に基づいているため、グローバル変数汚染を回避する方法をよく見ています。
(関数(){ // ... })();関数内では、VARとVARのない変数が異なります。ローカル変数を宣言するVARSがあり、VARSはありませんが、グローバル変数が宣言されているため、インターフェイスを外部に公開できます。
グローバルな範囲で変数を宣言すると、VARとVARは同じように見えます。宣言されたグローバル変数はWindowsの特性であることがわかっています。それらが同じかどうかにかかわらず、ecmascrpit5が提供する属性クエリメソッドを介して違いを発見します。
var ffff = 2; window.fffa = 3; FFB = 4; this.ffc = 4; var fftx = object.getownPropertyDescriptor(window、 'ffff'); // configurable:false、列挙可能:true、value:2、writable:true var ffatx = object.getownPropertyDescriptor(window、 'fffa'); //構成可能:true、列挙可能:true、value:2、writable:true var ffbtx = object.getownpropertydescriptor(window、 'fffa'); //構成可能:true、列挙可能:true、value:2、writable:true var ffbtx = object.getownPropertyDescriptor(window、 'ffb'); //構成可能:true、列挙可能:true、value:2、writable:true var ffctx = object.getownPropertyDescriptor(window、 'ffc'); //構成可能:true、列挙可能:true、value:2、writable:true
上記を通して、私たちはまだ違いがあることを発見しました。 Deleteを使用して、構成Falseを使用した属性を削除できないことを確認しました。つまり、変数VARを介して宣言されたグローバルオブジェクトのプロパティを削除することはできません。また、関数宣言によって作成されたグローバルオブジェクトのプロパティを削除できないこともわかります。
ffffを削除します。 // FFFAを削除できません。 // FFBを削除できます。 // FFCを削除できます。 //削除できます
結論は、VARを追加することと、VARなしでグローバル変数を宣言することには違いがあるということです。
VARステートメントを使用してステートメントを繰り返し宣言することは合法であり、無害です。宣言が繰り返され、割り当てが提供された場合、一般的な割り当て声明と違いはありません。宣言されていない変数を読み取ろうとすると、JSはエラーを報告します。
JavaScriptの範囲内の宣言された変数または内部関数は、関数本体に表示されます。意味、関数は定義される前に既に利用可能になる場合があります。関数を定義するには2つの方法があります。1つは関数定義式であり、もう1つは関数宣言ステートメントです。
//関数定義式var fns = function(){// ...}; //関数宣言ステートメント関数fns(){// ...}関数宣言の声明は、外部スクリプトまたは外部関数範囲の上部に「Advanced」であるため、このように宣言された関数は、再び表示されるコードで呼び出されます。関数定義式では、変数の宣言が進んでいますが、変数の割り当ては進歩していないため、式で定義された関数を関数定義の前に呼び出すことはできません。
(function(){testa(); // testa testb(); //エラーを報告する:未定義はfunction console.log(testc)ではないことがプロンプトされます。 "testc";もちろん、変数と関数を宣言する場合、基本的な仕様を順守する必要があり、変数と関数宣言は事前に行う必要があります。