JavaScriptで変数を宣言するためのキーワードは何ですか

青灯夜游
リリース: 2023-01-06 11:17:06
オリジナル
9835 人が閲覧しました

JavaScript で変数を宣言するためのキーワードは、var、let、const です。 var で宣言された変数は、あらゆるタイプの値を保存するために使用できます。宣言のスコープは関数スコープであり、let 宣言のスコープはブロック スコープです。const で変数を宣言する場合、変数は同時に初期化する必要があります時間であり、初期化後に値を変更することはできません。

JavaScriptで変数を宣言するためのキーワードは何ですか

このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

変数キーワード var、let、const を宣言します。

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 = &#39;matt&#39;;
ログイン後にコピー

4.使用建议

let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。

4.1.不使用var

    限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。

4.2.const优先,let次之

    使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。

更多编程相关知识,请访问:编程入门!!

以上がJavaScriptで変数を宣言するためのキーワードは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート