JavaScript之坑了我--函式細節

eBusinessMan發表於2015-11-04

函式細解:

  1.  函式的宣告三種

       a. 普通直接方式:

       function  say(name){alert(name);}

b. 變數初始化的方式:

   var  say = function(name){ alert(name);};

c.  原始方式:

   var  say = new Function(‘name’,” alert(name);”);

注意:c種方式能體現js中“函式也是物件,函式名是指標”。不過這種宣告方式很損效能:第一次是ECMAScript程式碼,第二次是解析傳入建構函式中的字串;故少用。

2.  由於函式也是物件,即變數,所以,我們可以將一個函式作為值進行傳參

    function getSum(sumFunc , x,y){
        return sumFunc(x ,y);

}

function sum (x ,y){

return x+y;

}

getSum(sum , 2 , 3);//!!!
     
    再深入點:

      js函式作為物件,要注意以下屬性

      我們在瀏覽器console中   執行:
              Object.getOwnPropertyNames( function(){….} );

結果:
       ["length", "name", "arguments", "caller", "prototype"]
解析:     

length: 函式的引數的個數

name : 當前函式的名字:用在多個函式的迴圈中

arguments : 一個類陣列物件,包含著在函式執行過程中傳入函式中的所有引數,其中一個屬性callee指向當前函式物件,可用在遞迴;

caller :

prototype : 指向原型物件。

 

然而由此引發我的問題來了:

1.       Js中函式引數如何宣告:不確定的引數個數?例如Function(‘’,’’ ‘’,’’ ‘’,’’……)

2.       Js函式物件建立時底層如何實現獲取此函式的名字?

3.       Js函式開始執行前做了什麼工作:例如將傳參封裝到arguments物件中之類的
目前本人尚未解決,後續。。。。。。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1822704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章