ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript_javascript スキルにおける var ありの変数宣言と var なしの変数宣言の違いの例
この記事では、JavaScript での var を使用した変数宣言と var を使用しない変数宣言の違いについて説明します。JS の変数宣言のスコープは関数に基づいているため、グローバル変数の汚染を回避する方法は
です。(function(){ // ... })();
関数内で、var を使用して宣言された変数と var を使用せずに宣言された変数は異なります。 var を使用して宣言されたものはローカル変数であり、var を使用せずに宣言されたものはグローバル変数であるため、これを使用してインターフェイスのものを外部に公開できます。
グローバル スコープで変数を宣言すると、var の有無にかかわらず同じように見えます。宣言されたグローバル変数が window の属性であるかどうかは、ECMAScrpit5 が提供する属性クエリ メソッドを使用して見つけます。違います。
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
上記の結果、まだ違いがあることがわかりました。属性を削除するために delete を使用して、構成可能性が false の属性が削除できないことを確認してみましょう。つまり、変数 var で宣言されたグローバル オブジェクトの属性は削除できません。関数宣言で作成されたグローバル オブジェクトの属性も削除できません。
delete fff; // 无法删除 delete ffa; // 可删除 delete ffb; // 可删除 delete ffc; // 可删除
結論としては、グローバル変数を var 付きで宣言する場合と、var なしで宣言する場合には違いがあるということです。
var ステートメントを使用して宣言ステートメントを繰り返すことは合法であり、無害です。ステートメントが代入を伴って繰り返される場合、それは通常の代入ステートメントと何ら変わりません。宣言されていない変数を読み取ろうとすると、JS はエラーを報告します。
JavaScript の関数スコープ内では、宣言された変数または内部関数が関数本体に表示されます。つまり、関数は定義される前に使用できる可能性があります。関数を定義するには、関数定義式と関数宣言文の 2 つの方法があります。
// 函数定义表达式 var fns = function (){ // ... }; // 函数声明语句 function fns(){ // ... }
関数宣言ステートメントは外部スクリプトまたは外部関数スコープの先頭に「進められる」ため、この方法で宣言された関数は、定義される前に出現するコードによって呼び出すことができます。関数定義式では、変数の宣言は行われますが、変数への代入は行われません。そのため、関数が定義される前に、式で定義された関数を呼び出すことはできません。
(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"; })();
もちろん、変数や関数を宣言する際には、基本仕様に準拠しなければなりません。変数や関数は事前に宣言しておく必要があります。