2

これを例にとります。

if (b) b = 1;

参照エラー。b は定義されていません。当たり前だけどこれやったら…

if (b) var b = 1;

コンソールで未定義になります。そして今、bが何であるかを調べると、未定義として表示されます。

同じ if ステートメントをもう一度実行しようとすると、 b が true でも false でもなく、未定義であるため、合格しませんが、私の質問は、なぜ未定義として表示されるのでしょうか? ifステートメントが成功するか失敗するかに関係なく、Javascriptはifステートメントを通過しますか? ありがとう。

4

2 に答える 2

3

すべてvarの s は、値を に初期化して、それらが含まれるスコープの先頭に引き上げられますundefined。値は、実行がvar元の行に到達したときに設定されます。

2 番目の例では、 が原因で、 が検出される前のようにb初期化されます。次のように書くのと同じと考えてください。undefinedifvar

var b;
if (b) b = 1;

このコードが実行された後bも、初期値がfalsyundefinedであるため、ブロックに実行されないためです。if

pstで述べたように、これは JavaScript の言語固有の機能であるため、他の言語でコードを記述するときに同じ動作を期待しないでください。

于 2013-01-23T22:45:58.917 に答える
0

JS は if ステートメントを通過するのではなくif、ステートメントの一部を読み取っています。ステートメントb内以外のどこにも定義されていないため、 .ifundefined

于 2013-01-23T22:13:04.847 に答える