ホームページ > 記事 > ウェブフロントエンド > JavaScriptで変数を宣言するためのキーワードは何ですか
JavaScript で変数を宣言するためのキーワードは、var、let、const です。 var で宣言された変数は、あらゆるタイプの値を保存するために使用できます。宣言のスコープは関数スコープであり、let 宣言のスコープはブロック スコープです。const で変数を宣言する場合、変数は同時に初期化する必要があります時間であり、初期化後に値を変更することはできません。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
ECMAScript 変数は、大まかに型指定されます。つまり、変数を使用して、任意の型の変数を保存できます。 data では、各変数は、任意の値を保持するために使用される名前付き プレースホルダーにすぎません。
1.var キーワード
var で宣言された変数は、任意の 型の値を保存するために使用できます (特別な場合を除く)。値 unknown は初期化中に保存されます。他の言語と同様、JavaScript も定義中に変数に値を割り当てることができます。変数は
save として定義されます。割り当てられた値の変数JavaScript は 動的言語 であるため、変数を初期化するときに、変数は割り当てられたデータ型として識別されず、単純な割り当てにすぎません。次に、保存された値を変更できるだけでなく、値の型も変更できます。
var message = "hi"; message = 100;
1.1.var 宣言スコープ
var 演算子を使用します。 定義された変数は、それを含む関数に対してローカルになります。たとえば、関数内で var を使用して変数を定義すると、関数の終了時に変数が破棄されることになります。これがガベージ コレクション と呼ばれるものだと思います:
function test( ) { vart message = "hi"; //局部变量 } test( ); console.log(message); //报错!関数の後にcall 変数はランダムに破棄されるため、最後の行でエラーが報告されます。ただし、関数で変数を定義するときに var 演算子を省略すると、
グローバル変数 を作成できます。
function test( ) { message = "hi"; //全局变量 } test( ); console.log(message); //"hi"関数 test() が 1 回呼び出される限り、グローバル変数メッセージが定義され、関数の外部アクセスが可能になります。ただし、ローカル スコープで定義されたグローバル変数は保守が難しいため、一般的には推奨されません。
1.2. Var 宣言の昇格
var キーワードを使用して宣言された変数は、関数スコープの先頭に自動的に昇格されます、いわゆる「巻き上げ」 (ホイスト)、つまりすべての変数宣言を関数スコープの先頭にプルします:
function fool( ) { console.log(age); var age = 28; } fool( ); //undefinedここではエラーは報告されませんが、 ECMAScript 実行時は、
function fool( ) { var age; console.log(age); age = 28; } fool( ); //undefined
2.let ステートメント
のコードと同等とみなされます。 let と var の機能はほとんど同じですが、非常に重要な違いがあります。最も明らかな違いは、let 宣言のスコープがblock スコープ であるのに対し、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 つのキーワードは、異なる型の変数を宣言するものではなく、関連するスコープ内で変数がどのように存在するかを示すだけです。
2.1. 一時的なデッドゾーン
let と var のもう 1 つの重要な違いは、let で宣言された変数が使用されないことです。ドメイン内でプロモートされます:
//name会提升 console.log(name); //undefined var name = 'matt'; //name不会提升 console.log(name); //ReferenceError:name没有定义 let name = 'matt';
2.2. グローバル宣言
var とは異なり、let 変数を使用してグローバル スコープで宣言されます。ウィンドウ オブジェクトの属性にはなりません (var で宣言された変数は変わります):var name = 'matt'; console.log(window.name); //'matt' let name = 'matt'; console.log(window.name); //undefinedただし、宣言は依然としてグローバル スコープ内で行われ、対応する変数はページの宣言サイクル内で保持されます。
2.3. 条件宣言
let のスコープはブロックなので、同じ名前の変数が存在するかどうかを確認することはできません。 let を使用して事前に宣言されていると同時に、それを宣言せずに宣言することもできません。 try/catch または typeof 演算子を使用しても、条件ブロック内の let 宣言の範囲がそのブロックに制限されているため、この問題を解決することはできません。このため、新しい ES6 宣言キーワード let は条件付き宣言パターンに依存できません。2.4. for ループでの 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
【相关推荐:javascript学习教程】
3.const声明
const的行为与let基本相同,唯一一个重要区别是它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行错误。
const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制:
const person = { }; person.name = 'matt';
4.使用建议
let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。
4.1.不使用var
限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。
4.2.const优先,let次之
使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。
更多编程相关知识,请访问:编程入门!!
以上がJavaScriptで変数を宣言するためのキーワードは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。