js では、var、let、const キーワード宣言を使用できます。 var で宣言された変数は、あらゆるタイプの値を保存するために使用でき、スコープは関数スコープです。let で宣言された変数は {} で使用され、変数のスコープはブロックレベルのドメインに制限されます。const が使用されます。定数を変更するため、宣言位置は制限されません。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
ECMAScript 変数は大まかに型付けされています。つまり、変数はあらゆるタイプのデータの保存に使用でき、各変数は保存に使用される単なる変数です。 any 値の名前付きプレースホルダー。
var で宣言された変数は、JavaScript の他の言語と同様に、あらゆるタイプの値を保存するために使用できます (未定義の特別な値は初期化せずに保存されます)。変数を定義するときに、変数に値を割り当てることもできます。変数は、割り当てられた値を保存する変数として定義されます。JavaScript は動的言語であるため、変数を初期化するときに、割り当てられたデータ型として識別されません、しかし、ただの簡単な課題です。次に、保存された値を変更できるだけでなく、値の型も変更できます。
var message = "hi"; message = 100;
var 演算子を使用して定義された変数は、ローカル変数になります。それを含む関数の変数。たとえば、関数内で var を使用して変数を定義すると、関数の終了時に変数が破棄されることになります。これがガベージ コレクションと呼ばれるものだと思います。
function test( ) { vart message = "hi"; //局部变量 } test( ); console.log(message); //报错!
関数が呼び出された後、変数はしたがって、最後の行ではエラーが報告されます。ただし、関数で変数を定義するときに var 演算子を省略すると、グローバル変数を作成できます。
function test( ) { message = "hi"; //全局变量 } test( ); console.log(message); //"hi"
関数 test() が 1 回呼び出されるだけで、グローバル変数メッセージが定義され、グローバル変数メッセージを作成できます。関数外でアクセスされます。ただし、ローカル スコープで定義されたグローバル変数は保守が難しいため、一般的には推奨されません。
var キーワードを使用して宣言された変数は、関数スコープの最上位、いわゆる「ホイスト」 (ホイスト) に自動的に昇格されます。 , すべての変数宣言がプルされます 関数スコープの先頭に移動します:
function fool( ) { console.log(age); var age = 28; } fool( ); //undefined
ここではエラーは報告されませんが、未定義が表示されます。ECMAScript は実行時に次のコードと同等として扱います:
function fool( ) { var age; console.log(age); age = 28; } fool( ); //undefined
let と var の関数は似ていますが、非常に重要な違いがあります。最も明らかな違いは、let 宣言のスコープがブロック スコープであるのに対し、var 宣言のスコープは関数スコープであることです。
if (true) { let age = 26; console.log(age); //26 } console.log(age); //ReferceError:age没有定义
age 変数のスコープはブロックの内部に制限されます。したがって、if ブロックの外では参照できません。ブロック スコープは関数スコープのサブセットであるため、var に適用されるのと同じスコープ制限が let にも適用されます。
Let では、同じスコープ内に冗長な宣言を出現させることもできません (var can):
var name; var name; let age; let age; //SyntaxError;标识符age已经声明过了
さらに、冗長な宣言エラーは、var と let を混合しても影響を受けません。これら 2 つのキーワードは、異なる型の変数を宣言するものではなく、関連するスコープ内で変数がどのように存在するかを示すだけです。
let と var のもう 1 つの重要な違いは、let で宣言された変数はスコープ内でプロモートされないことです:
//name会提升 console.log(name); //undefined var name = 'matt'; //name不会提升 console.log(name); //ReferenceError:name没有定义 let name = 'matt';
var とは異なり、let を使用してグローバル スコープで宣言された変数はウィンドウ オブジェクトの属性にはなりません (var で宣言された変数は属性になります):
var name = 'matt'; console.log(window.name); //'matt' let name = 'matt'; console.log(window.name); //undefined
ただし、let 宣言は依然としてグローバル スコープの場合、対応する変数はページの宣言サイクル内で保持されます。
let のスコープはブロックであるため、同じ名前の変数が以前に let を使用して宣言されているかどうかを確認することはできません。宣言せずに宣言します。 try/catch または typeof 演算子を使用しても、条件ブロック内の let 宣言の範囲がそのブロックに制限されているため、この問題を解決することはできません。このため、新しい ES6 宣言キーワード let は条件付き宣言パターンに依存できません。
var を使用する場合、最も一般的な問題は、反復変数の奇妙な宣言と変更です:
for(var i = 0; i < 5; ++i) { setTimeout( () => console.log(i) ,0) } //你可能以为会输出0、1、2、3、4 //实际上输出的是5、5、5、5、5
ループを終了するときその間、反復変数には、ループを終了する原因となった値が保持されます。 5. setTimeout タイムアウト ロジックが後で実行される場合、i は同じ変数であるため、最終出力は同じ値になります。
let を使用して反復変数を宣言すると、JavaScript エンジンはバックグラウンドで反復ループごとに新しい反復変数を宣言し、各 setTimeout は異なる変数インスタンスを参照します:
for(let i = 0; i < 5; ++i) { setTimeout( () => console.log(i) ,0) } //会输出0、1、2、3、4
const の動作は基本的に let と同じです。唯一の重要な違いは、変数を宣言すると同時に変数を初期化する必要があることと、const で宣言された変数を変更しようとすることです。実行時エラーが発生します。
const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制:
const person = { }; person.name = 'matt';
let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。
限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。
使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。
【推荐学习:javascript高级教程】
以上がJavaScript が変数を宣言するために使用するキーワードはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。