JavaScript函數

在JavaScript中,函數本身與其他任何的內助對象在地位上是沒有區別的,函數本身也是對象。

在JavaScript中:

函數可以被賦值給一個變量

可以被賦值爲對象的屬性

可以作爲參數被傳入別的函數

可以作爲函數的結果被返回

可以用字面量來創建

1.函數對象

通過new 操作符來創建

var add=new Function("x","y","return(x+y)");


通過字面量來創建

function add(x,y){

  return x+y;

}

var add=function(x,y){

return x+y;

}


2. 函數的參數

在JavaScript中,函數的參數是比較有意思的,比如,你可以將任意多的參數傳遞給一個函數,即使這個函數聲明時並未制定形式參數,比如:


function adPrint(str,len,option){

  var s=str ||"default";

   var l=len ||s.length;

   var o=option  || "i";

  s=s.substring(0,1);

switch(o){

    switch(o)  {

    case "u":

         s=s.toUpperCase();

         break;

    case "1":

         s=s.toUpperCase();

         break;

      default:

        break;

      }

     print(s);

}


}


adprint("hello,world");

adprint("hello,world",5);

adprint("hello,world",5,"1");  //lower case

adprint("hello,world",5,"u");  //upper case

函數adPrint在聲明時接受三個形式參數:要打印的串,要打印的長度,是否轉換爲大小寫的標記。但是在調用的時候,我們可以按順序傳遞給adrint一個參數,

兩個參數,或者三個參數


3.函數上下文

在JavaScript中,函數也是一種對象,並非其他任何對象的一部分。函數的上下文是可以變化的,因此,函數內的

this也是可以變化的,函數可以作爲一個對象的方法,也可以同時作爲另一個對象的方法,總之,函數本身是獨立的。

可以通過Function對象上的call或者apply函數來修改函數的上下文:

4.call和apply

call 和apply通常用來修改函數的上下文,函數中的this指針將被替換爲call或者apply的第一個參數。


//定義一個人,名字爲jack

var jack ={

                name:"jack"'

                 age:26

                 }

//定義另一個人,名字爲abruzzi

 var abruzzi ={

                  name:"abruzzi",

                  age:26

            }

//定義一個全局的函數

function printName(){

                    return this.name;

}

.//設置printName的上下文爲jack,此時的this爲jack

print(printName.call(jack));

//設置printName的上下文爲abruzzi,此時的this爲abruzzi

print(printName.call(abruzzi));

print(printName.apply(jack));

print(printName.apply(abruzzi));

只有一個參數的時候call和apply的使用方式是一樣的,如果有多個參數:

apply的第二個參數爲一個函數需要的參數組成的一個數組,而call則需要跟若干個參數,參數之間以逗號隔開即可





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章