JavaScript 変数のscope_javascript スキルに関する面接の質問

WBOY
リリース: 2016-05-16 15:11:29
オリジナル
2037 人が閲覧しました

編集者は、この質問が JavaScript の範囲を理解するのに非常に役立つと感じたので、他の人に役立つことを願って、私自身の問題解決のアイデアを再度整理しました。

まずは面接の質問を見てみましょう:

var arr = [1, 2, 3];
  for (var i = 0, j; j = arr[i++];) {
    console.log(j);
  }

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

ログイン後にコピー

問題を解決する前に、まず JavaScript の変数フィールドに関連する知識を確認しましょう。

グローバル変数 (グローバル)
グローバル変数とは、どこからでもアクセスできる変数を指します。

という 2 つの状況があります。

var キーワードを使用するかどうかに関係なく、関数の外で宣言されています
var キーワードを使用せずに関数内で宣言します。当然、宣言されたステートメントは実行される必要があります
ローカル変数 (ローカル)
ローカル変数は、宣言された関数内でのみアクセスできます
関数内で宣言され、var キーワード
を使用します。 2つの注意点

まずコードを見てください:

alert(i); // 输出 undefined
 
 for (var i = 0; i < 1; i++){};
 
 alert(i); // 输出1
ログイン後にコピー

JavaScript にはステートメントのスコープがありません。ステートメント内で定義された変数はステートメントの外側に広がります。この例では、i は for ステートメントの中で宣言されていますが、for ステートメントの外側でもアクセスできます。
i は for ステートメントの前でアクセスできますが、まだ割り当てられていません
問題解決を始めましょう

i++ は i が使用された後に追加されます:

初めて実行すると、j=arr[0]、次に i=1、console.log(j) は 1 を出力します

2 回目の実行では、j=arr[1]、次に i=2、ocnsole.log(j) は 2 を出力します

3 回目の実行では、j=arr[2]、次に i=3、ocnsole.log(j) は 3 を出力します

4 回目 (for 条件を満たさない)、j=arr[3] が未定義、その後 i=4、ocnsole.log(j) は出力がなく、for ループを終了します

for ステートメントの実行後、console.log(i) は上記の分析から 4 を出力し、console.log(j) は未定義を出力します

最終的な出力結果は次のとおりです:

2
---------
---------
undefined
---------
ログイン後にコピー

誰もが上記の分析と結果を理解したはずです。その後、推論を始めることができます。

質問を借用し、質問を 1 つ変更します
タイトル:
var arr = [1, 2, 3];

  for (var i = 0, j; j = arr[++i];) {
    console.log(j);
  }

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

ログイン後にコピー

答え:

2
3
---------
3
---------
undefined
---------
ログイン後にコピー

質問を借用し、質問 2 を修正しました
タイトル:

function xxx() {
    var arr = [1, 2, 3];
    for (var i = 0, j; j = arr[i++];) {
      console.log(j);
    }
  }
  xxx();

  console.log('---------');
  console.log(i);
  console.log('---------');
  console.log(j);
  console.log('---------');

ログイン後にコピー

答え:

1
2
3
---------
报错:Uncaught ReferenceError: i is not defined
ログイン後にコピー

これをあなたに共有します。JavaScript のスコープを理解するのに役立つことを願っています。

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