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

最後輸出結果為:

1


---------

---------
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


---------
報錯:Uncaught ReferenceError: i is not defined
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved