javascriptのvarとES 6仕様の中でlet、constの違いと使い方を詳しく説明します.
2660 ワード
ES 6仕様の到来に伴い、Jsにおいて変数を定義する方法は、単一のvar方式からvar、let、constの3種類に発展しました.varはみんな知っていますが、あの二人の新しく来た商品はいったいどんな特徴がありますか?いったいいつ使うべきですか?以下は、JavascriptのvarとES 6仕様のlet、constの違いについての詳細をまとめました.
私たちはまずネゴシックvar方式の定義変数に何のバグがありますか?
Jsはブロックレベルのスコープがありません.
このような規則を見てください.JS関数におけるvar宣言は、その作用域が関数体の全部です.
2.*サイクル内の変数を過度に共有する***.
以下のコードを実行すると何が起こるかを推測してください.
そうです.コンソールは予想の0、1、2ではなく3つの3つを出力しました.
実は、この問題の答えは、循環自体と三回のtimeoutフィードバックが、唯一の変数****iを共有することです.サイクル終了実行時、iの値は3となる.ですから、最初のtimeoutが実行されると、呼び出したiは許可されても3になります.
ここまで言うと、ゲストはletが何のために使うものかをすでに推測しています.
間違えていませんでした.この二つのバグを解決しました.上記の二つの例の中のvarをletに取って代わってもう一回実行してもいいです.
注意:「use strict」を宣言してからlet宣言変数を使用する必要があります.そうでないと、ブラウズして結果が表示されません.
letはもっと完璧なvarです.
let宣言の変数はブロックレベルのスコープを持っています.つまり、letで宣言した変数のスコープは、外層関数全体ではなく外層ブロックにすぎない.let声明はまだ特性を向上させていますが、盲目的に向上させることはできません.例としては、varをletに置き換えることによって、問題を迅速に修復することができます.
letが宣言するグローバル変数は、グローバルオブジェクトの属性ではありません.これはwindow.変数名でこれらの変数にアクセスできないことを意味します.それらは一つの見えないブロックのロールドメインにのみ存在し、このブロックは理論的にはWebページで動作するすべてのJSコードの外側のブロックである.
for(let x...)のような形のサイクルは、反復のたびにxに新しいバインディングを作成します.
これは非常に微妙な違いであり、例2を挙げると、一つのfor(let...)サイクルが複数回実行され、ループが一つのクローズドされている場合、各クローズドは、一つの循環変数の異なる値をコピーとして捉え、すべてのクローズドが循環変数の同じ値を獲得するのではなく、一つのループ変数の異なる値を獲得する.
したがって、例二においても、letにvarを置き換えることにより、バグを修復する.
このような状況は、for-of、for-i-n、および従来のセミコロンで分離されたクラスCサイクルの3つの循環に適用される.
letで変数を再定義すると文法エラーが発生します.
これはよく分かります.コードで話します.
これらの違い以外に、letとvarはほとんど似ています.一例を挙げると、それらはコンマ区切り宣言を使用する多重変数をサポートします.これらもコンマ区切り宣言をサポートします.
ES 6に導入された第三の声明類のキーワード:const
一言で言えば、constは定数を定義するものです.どんな脳の穴(fei)の大きい(zhu)のつける(liu)の書き方はすべて不法です.
例えばこうです
以上、var、let、constの使い方をまとめました.
Javascript ES 6仕様について詳細は以下の関連記事をご覧ください.
私たちはまずネゴシックvar方式の定義変数に何のバグがありますか?
Jsはブロックレベルのスコープがありません.
このような規則を見てください.JS関数におけるvar宣言は、その作用域が関数体の全部です.
for(var i=0;i<10;i++){
var a = 'a';
}
console.log(a);
forサイクルから飛び出したのに、forサイクル内で定義されている変数aにもアクセスできます.iさえ入れられて、ばつが悪いです.2.*サイクル内の変数を過度に共有する***.
以下のコードを実行すると何が起こるかを推測してください.
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i)
}, 1000);
}
ブラウザで実行してみて、あなたが予想していた結果と同じですか?そうです.コンソールは予想の0、1、2ではなく3つの3つを出力しました.
実は、この問題の答えは、循環自体と三回のtimeoutフィードバックが、唯一の変数****iを共有することです.サイクル終了実行時、iの値は3となる.ですから、最初のtimeoutが実行されると、呼び出したiは許可されても3になります.
ここまで言うと、ゲストはletが何のために使うものかをすでに推測しています.
間違えていませんでした.この二つのバグを解決しました.上記の二つの例の中のvarをletに取って代わってもう一回実行してもいいです.
注意:「use strict」を宣言してからlet宣言変数を使用する必要があります.そうでないと、ブラウズして結果が表示されません.
letはもっと完璧なvarです.
let宣言の変数はブロックレベルのスコープを持っています.つまり、letで宣言した変数のスコープは、外層関数全体ではなく外層ブロックにすぎない.let声明はまだ特性を向上させていますが、盲目的に向上させることはできません.例としては、varをletに置き換えることによって、問題を迅速に修復することができます.
letが宣言するグローバル変数は、グローバルオブジェクトの属性ではありません.これはwindow.変数名でこれらの変数にアクセスできないことを意味します.それらは一つの見えないブロックのロールドメインにのみ存在し、このブロックは理論的にはWebページで動作するすべてのJSコードの外側のブロックである.
for(let x...)のような形のサイクルは、反復のたびにxに新しいバインディングを作成します.
これは非常に微妙な違いであり、例2を挙げると、一つのfor(let...)サイクルが複数回実行され、ループが一つのクローズドされている場合、各クローズドは、一つの循環変数の異なる値をコピーとして捉え、すべてのクローズドが循環変数の同じ値を獲得するのではなく、一つのループ変数の異なる値を獲得する.
したがって、例二においても、letにvarを置き換えることにより、バグを修復する.
このような状況は、for-of、for-i-n、および従来のセミコロンで分離されたクラスCサイクルの3つの循環に適用される.
letで変数を再定義すると文法エラーが発生します.
これはよく分かります.コードで話します.
let a = 'a';
let a = 'b';
上記の書き方は許可されていません.ブラウザは誤報をします.重複して定義されていますから.これらの違い以外に、letとvarはほとんど似ています.一例を挙げると、それらはコンマ区切り宣言を使用する多重変数をサポートします.これらもコンマ区切り宣言をサポートします.
ES 6に導入された第三の声明類のキーワード:const
一言で言えば、constは定数を定義するものです.どんな脳の穴(fei)の大きい(zhu)のつける(liu)の書き方はすべて不法です.
例えばこうです
//
const a
:
//
const a = 'a';
const a = 'b';
このようなこともあります
//
const a = 'a';
a = 'b'
もう一つ黒科学技術があります.
// , , , ~
const a = {a:'a'};
//
a = {a:'b'};
//
a.a = 'b'
コンサートは確かに何も言っていませんが、一般ユーザーが使っても大丈夫です.高エンドユーザーがどう使うかは問題です.以上、var、let、constの使い方をまとめました.
Javascript ES 6仕様について詳細は以下の関連記事をご覧ください.