ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript スキルにおける var ありの変数宣言と var なしの変数宣言の違いの例

JavaScript_javascript スキルにおける var ありの変数宣言と var なしの変数宣言の違いの例

WBOY
WBOYオリジナル
2016-05-16 16:36:281084ブラウズ

この記事では、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"; 
})();

もちろん、変数や関数を宣言する際には、基本仕様に準拠しなければなりません。変数や関数は事前に宣言しておく必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。