天天看點

JavaScript 函數

一、JavaScript 函數 是由事件驅動的或者當它被調用時執行的可重複使用的代碼塊。

函數就是包裹在花括号中的代碼塊,前面使用了關鍵詞 function:

function functionname()
{
執行代碼
}      

當調用該函數時,會執行函數内的代碼。

可以在某事件發生時直接調用函數(比如當使用者點選按鈕時),并且可由 JavaScript 在任何位置進行調用。

(注意:JavaScript 對大小寫敏感。關鍵詞 function 必須是小寫的,并且必須以與函數名稱相同的大小寫來調用函數。)

二、局部JavaScript變量和全局JavaScript變量

  在 JavaScript 函數内部聲明的變量(使用 var)是局部變量,是以隻能在函數内部通路它。(該變量的作用域是局部的)。可以在不同的函數中使用名稱相同的局部變量,因為隻有聲明過該變量的函數才能識别出該變量。隻要函數運作完畢,本地變量就會被删除。

  而在函數外聲明的變量是全局變量,網頁上的所有腳本和函數都能通路它。

三、JavaScript 變量的生存期

JavaScript 變量的生命期從它們被聲明的時間開始。

局部變量會在函數運作以後被删除。

全局變量會在頁面關閉後被删除。

四、向未聲明的 JavaScript 變量配置設定值

如果您把值賦給尚未聲明的變量,該變量将被自動作為全局變量聲明。

這條語句:carname="Volvo";  将聲明一個全局變量 carname,即使它在函數内執行。

【test】

1.對一個數字(n)執行階乘操作,将得到1~n 的數字乘積,通常寫做3!(1X2X3或者6)。編寫一個JavaScript函數,使用遞歸的方法計算出指定數字的階乘。

解:可能的解決方案之一:

function findFactorial(n){
       if(n==0){
           return 1;
       }
       return  (n*findFactorial(n-1));
   }
    var num=findFactorial(4);  //将傳回 24
    alert(num);      

2.函數如何才能修改其作用域之外的變量?編寫一個函數,由1~5的數字組成的數組作為參數,調用該函數後将把其中的數字項替換成相應的字元串表示形式(也就是“one”,“two”等)

解:如果将一個對象(如一個數組)作為函數的參數傳入,那麼在函數中對這個數組的修改就會反映到函數外部。針對這個問題,其中一種解決方案是:

function makeArray(){
      var arr =[1,5,3];
       alert(arr);
       alertArray(arr);
       alert(arr);
   }

    function alertArray(arrOfNumbers){
        for(var i=0;i<arrOfNumbers.length;i++){
            switch (arrOfNumbers[i]){
                case 1 :arrOfNumbers[i] = "one";
                    break;
                case 2:arrOfNumbers[i] = "two";
                    break;
                case 3 :arrOfNumbers[i] = "three";
                    break;http://i..com/EditPosts.aspx?opt=1
                case 4:arrOfNumbers[i] = "four";
                    break;
                case 5:arrOfNumbers[i] = "five";
                    break;
            }
        }
    }      

3.建立一個函數,它的參數是一個資料對象和一個函數,它将對這個資料對象調用該函數

解:用一個匿名函數就能夠滿足需求:

function invokeFunction(dataObject,functionToCall){
       functionToCall(dataObject);
   }
    var funcCall = new Function('x','alert(x)');
    invokeFunction('hello',funcCall);      

繼續閱讀