JavaScriptで値を「割り当てる」


8

私はChrome開発ツールで遊んでいて、次のコードを試しました:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2

「let」を「var」に置き換えた場合、上記のコードは機能しません。

それlet = 1はと同じだと思いvar let = 1ます。もしそうなら、let x = 2翻訳すべきではない1 x = 2のでエラーになりますか?


1
letキーワードなので、変数に名前を付ける(または名前を付ける)べきではありません。Chromeにそれをさせてくれたのには驚きました(笑)。
isick

回答:


10

let = 1同じだと思いますvar let = 1

変数を宣言しますが、同じではありません。ここでの主な違いは、、、またはのような宣言を省略するvarletconstこの変数をグローバルに宣言することになります(以前に宣言した変数を設定していない場合)。これは、暗黙のグローバル -悪名高いコードのにおい - として知られているものです。

*ほとんどの場合、「グローバル」はwindowオブジェクトを指しますが、常にそうであるとは限りません。たとえば、Node.jsにはglobal、現在のモジュールを参照する独自の名前空間オブジェクトがあります。


もしそうなら、let x = 2翻訳すべきではない1 x = 2のでエラーになりますか?

いいえ。宣言/キーワードのlet = 1ネイティブ機能を上書きしませんlet。同じ名前のグローバル変数を作成しただけです。(おそらく言うまでもありませんが、これを行わないでください!


そして、あなたはこれを特に尋ねませんでしたが、取り組む価値があります:

なぜ私がやるさせて頂いておりますlet = 1が、ではありませんかvar = 1

var予約済みのキーワードです。

let、将来、現在、それだけで予約していますことを意味し予約キーワード、strictモードでは。そのことを念頭に置いて、時間のテストに耐えるコードを作成しようとしている場合letは、識別子として使用しないでください。MDNがリンクされた記事で述べているように、私はそれが後で予約語になると想像します。


素晴らしい説明、ありがとうございました!キーワードの種類を意識していませんでした。
ライセン

5

後方互換性。letは比較的新しいため、それを変数名として使用している古いスクリプトを壊さないようにする予約語ではありません。そのためlet、変数名として使用でき、としては使用できませんvar

let = 1はvar let = 1と同じであると想定しています。

いいえ、それはむしろ等しくsomeothername = 1、非常に悪い暗黙のグローバル変数を作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.