網頁設計

當前位置 /首頁/設計製作/網頁設計/列表

javascript匿名函式的用法

摘要

javascript匿名函式的用法

本文講解的是javascript最基礎也是最重要的東西--函式,之所以寫這篇文章,是因為面試的時候問到了,也算是溫故而知新了。

先上個例子,如果你看懂了,說明你已經理解了本文要講的。

複製程式碼 程式碼如下:var f = (function() {

function f() {return 10;}

return f();

function f() {return 20;}

var f = 30;

})();

(f);

javascript高階程式設計中這樣描述函式--可以封裝任意多條語句,而且可以在任何地方、任何時候呼叫執行。之前介紹過了strict mode,嚴格模式對函式有一些限制:

① 不能把函式命名為eval或arguments

② 不能把引數命名為eval或arguments

③ 不能出現兩個命名引數同名的情況

發生以上情況就會導致語法錯誤,程式碼無法執行。

函式定義

函式定義分為三種

1、建構函式

複製程式碼 程式碼如下:var fun = new Funciton();

2、普通定義

複製程式碼 程式碼如下:function fun() {}

3、函式式定義

複製程式碼 程式碼如下:var fun = function() {};

這三種方式都可以定義函式fun。

引數

函式不介意傳遞進來多少個引數,也不在乎傳進來的引數是什麼資料型別。即便你定義的函式只接收兩個引數,在呼叫這個函式時也未必一定要傳遞兩個引數。可以傳遞一個、三個甚至不傳遞引數。原因是引數在內部是用一個數組來表示的。在函式體內可以通過arguments物件來訪問引數陣列,舉個例子

複製程式碼 程式碼如下:function sayHi() {

alert("Hello " + arguments[0] + "," + arguments[1]);

}

通過訪問arguments物件的length屬性來獲知有多少個引數。函式的length會返回函式的引數個數。

注意:所有引數傳遞的`都是值,不可能通過引用傳遞引數。

函式不能過載,只能重寫

如果定義了兩個名字相同的函式,則該名字只屬於最後定義的函式,舉個例子:

複製程式碼 程式碼如下:

function add(num) {

return num + 100;

}

function add(num) {

return num + 200;

}

var result = add(100) //300

注意:函式在執行完return語句之後停止並立即退出。

函式種類

函式分為兩種一種是有名函式,另一種是匿名函式。例如下面的有名函式

複製程式碼 程式碼如下:function fun() {

}

如果呼叫的話,只需要fun()就可以。

匿名函式,顧名思義就是沒有函式名。例如

function() {}

函式呼叫是通過函式名來呼叫,匿名函式怎麼呼叫呢?一種就是將匿名函式賦給一個變數,讓這個變數充當函式名。另一種就是用()來呼叫,例如下面三種方法

1、(function() {return;}());

2、(function() {return;})();

3、function() {return;}();

例子:

複製程式碼 程式碼如下:

(function(x, y) {

alert(x + y);

})(2,3);

//alert(5)

2和3將會作為引數傳遞給x和y

下面就來講講最上面的例子,這個例子裡面涉及到閉包,後面會說

首先定義一個變數f,然後賦值一個匿名函式,這裡呢需要注意一點函式裡所有變數的定義都會被前置,所以匿名函式裡的執行順序是

複製程式碼 程式碼如下:

var f = (function() {

var f = 30;

function f() {return 10;}

function f() {return 20;}

return f();

})();

外面的變數f和裡面的變數f不在同一個作用域內(閉包),所以互不影響。因為函式不能過載,所以外面變數f=(function f() {return 20;})();,所以最終輸出的是20。

TAG標籤:函式 匿名 JavaScript #