js:深入函數的定義

函數定義方式:
1.function fun1(){alert(“fun1”);} //函數就是一個非常特殊的對象,是一個Function的實例,其實在內存中存儲的操作是通過一個鍵值對來存儲的。
2.由於函數是一個對象,所以可以通過如下方式定義
var fun2 = fun1; //通過函數拷貝給fun2完成賦值,但fun1、fun2這兩個引用並沒有指向同一個對象(雖然他們指向的對象的內容是一樣的)。
fun1 = function(){alert(“fun111”);}
//函數雖然是一個對象,但是卻和對象有一些區別,對象是通過引用的指向來完成對象的賦值的,
而函數卻是通過對象的拷貝來完成的。所以fun1即使變瞭,也不會影響fun2。
fun2(); //fun1
fun1(); //fun111

//對於對象而言,是通過引用的指向來完成賦值的,此時修改o1或者o2會導致另一方的指向隨之改變。
var o1 = new Object();
var o2 = o1; //o1、o2指向同一塊空間
o2.name = “octopus”;
alert(o1.name); //octopus
//

————————————————————————————–
1). function sum(num1,num2){return num1+num2;} //相當於:var sum = function(num1,num2){return num1+num2;}
2). function sum(num1){return num1;} //相當於:var sum = function(num1){return num1}
alert(sum(1)); //1
alert(sum(1,1));//1,不是2
/*此時sum所指向的空間已經從有兩個參數的函數變化到隻有num1的函數中,
在調用的時候就隻會調用隻有num1的函數,
特別指出:函數的參數和調用沒有關系,如果函數隻有一個參數,但是卻傳入瞭兩個參數,僅僅隻會匹配一個
所以在js中函數不存在重載。*/

3.var fn = new Function{“num1″,”num2″,”alert(‘fun:’+(num1+num2));”};
//等價於:function fn(num1,num2){alert(num1+num2);}

//函數是對象,不存在重載,隻存在覆蓋,後面的定義會覆蓋前面的定義。

原創文章如轉載,請註明出處”“本文首發於csdn網站:https://blog.csdn.net/magneto7/article/details/24584213”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *