DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 一道關於JavaScript變量作用域的面試題
一道關於JavaScript變量作用域的面試題
編輯:關於JavaScript     

小編覺得這道題對理解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 中,變量域相關的知識。

全局變量(Global)
全局變量是指在任何地方都可以訪問的變量,有兩種情況

在 function 外面聲明,不論是否用 var 關鍵字
在 function 裡面聲明,不使用 var 關鍵字,當然聲明的語句必須被執行才可以
局部變量(Local )
局部變量只能在被聲明的 function 內部才能訪問
在 function 裡面聲明,使用 var 關鍵字
兩點要注意的地方

先看代碼:

alert(i); // 輸出 undefined
 
 for (var i = 0; i < 1; i++){};
 
 alert(i); // 輸出1

JavaScript 不存在語句作用域,在語句內定義的變量會擴散到語句外邊, 例子中 i 在 for 語句中聲明,但是在 for 語句的外面任然可以訪問
在 for 語句之前就可以訪問到 i ,只不過這時候還沒有被賦值
開始我們的解題

i++ 是在 i 使用後再自加:

第一次執行時,j=arr[0],之後 i=1,console.log(j) 輸出 1

第二次執行時,j=arr[1],之後 i=2,ocnsole.log(j) 輸出 2

第三次執行時,j=arr[2],之後 i=3,ocnsole.log(j) 輸出 3

第四次(不符合 for  條件),j=arr[3] 為 undefined,之後 i=4,ocnsole.log(j) 沒有輸出,退出 for 循環

for 語句執行結束後,console.log(i) 由上分析可知輸出 4,console.log(j) 輸出 undefined

最後輸出結果為:

2
---------
---------
undefined
---------

針對上面的分析和結果,想必大家都已經搞清楚了吧,然後我們開始舉一反三吧。

借題改題一
題目:
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
---------

借題改題二
題目:

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作用域有所幫助。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved