9

私の問題はここにあります 私はJavaScriptを学んでいますが、プログラミングはまったく新しいものではありません。私は巻き上げを理解していますが、厳密モードでは、6 が宣言されていない変数に割り当てられているか、document.getElement... が割り当てられているときにエラーが発生してキャッチされるべきではありません。これはエラーを生成しないため、私の診断は巻き上げですまだ進行中です..これは好きではなく、strict を使用して取り除きたいと考えています。Chrome バージョン 42.0.2311.152 m をブラウザとして使用

function strictMode(){
    'use strict';
    try {
        x = 6;
        document.getElementById('hoisting').innerHTML = x;
        var x;
     }
     catch(err) {
                    document.getElementById('error_report').innerHTML = 
                        "There was an error that occured (Were in Strict Mode)" +
                            " " + err.message;
               }
}
4

3 に答える 3

14

変数宣言 (すなわちvar x;) は、代入後に宣言したとしても、それらが記述されているスコープ全体に対して有効です。これが「ホイスト」の意味です。はスコープの先頭にホイストされ、そのスコープのどこかで宣言されているためvar x;、割り当てx = 6;は問題ありません。x

Strict モードはこれを変更しません。宣言を完全に省略した場合、エラーがスローされますvar x;厳密モードを使用しないと、変数のスコープは暗黙的にグローバル スコープになります。

ES2015 (別名 ES6) では、 のlet代わりにキーワードを使用することで巻き上げが回避されvarます。(他の違いは、で宣言された変数はlet、関数全体ではなく、周囲のブロックに対してローカルであることです。)

于 2015-05-31T16:02:10.053 に答える
0

javascript が許可するいくつかの奇妙なことがあります。言語を学習している人として、適切なコーディング手法と戦うことを学ばなければなりません ( simicolonは別の良い例です)。巻き上げの場合、一般に、巻き上げられるスコープの先頭で変数を宣言することをお勧めします。すでに述べたように、厳密モードは特効薬ではなく、これを強制するものではありません。

于 2015-05-31T16:10:07.340 に答える
0

つまり、strict モードの JavaScript では、宣言されていない変数を使用することはできません。ここでは、巻き上げを無効にすることに関連するものはありません。初期化される変数が宣言されていない場合、エラーがスローされます。

于 2021-01-28T06:48:55.683 に答える