javascript匿名函數

摘要:

    本文講解的是javascript最基礎也是最重要的東西--函數,之因此寫這篇博文,是由於面試的時候問到了,也算是溫故而知新了。javascript

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

 1 var f = (function() {
 2 
 3     function f() {return 10;}
 4 
 5     return f();
 6 
 7     function f() {return 20;}
 8 
 9     var f = 30;
10 
11 })();
12 
13 console.log(f);

 

    javascript高級程序設計中這樣描述函數--能夠封裝任意多條語句,並且能夠在任何地方、任什麼時候候調用執行。以前介紹過了strict mode,嚴格模式對函數有一些限制:java

  1. 不能把函數命名爲eval或arguments
  2. 不能把參數命名爲eval或arguments
  3. 不能出現兩個命名參數同名的狀況

發生以上狀況就會致使語法錯誤,代碼沒法執行。面試

函數定義

函數定義分爲三種數組

一、構造函數閉包

var fun = new Funciton();函數

二、普通定義spa

function fun() {}設計

三、函數式定義code

var fun = function() {};

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

參數

函數不介意傳遞進來多少個參數,也不在意傳進來的參數是什麼數據類型。即使你定義的函數只接收兩個參數,在調用這個函數時也未必必定要傳遞兩個參數。能夠傳遞一個、三個甚至不傳遞參數。緣由是參數在內部是用一個數組來表示的。在函數體內能夠經過arguments對象來訪問參數數組,舉個例子

function sayHi() {

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

}

經過訪問arguments對象的length屬性來獲知有多少個參數。函數的length會返回函數的參數個數。

注意:全部參數傳遞的都是值,不可能經過引用傳遞參數。

函數不能重載,只能重寫

若是定義了兩個名字相同的函數,則該名字只屬於最後定義的函數,舉個例子:

 1 function add(num) {
 2 
 3     return num + 100;
 4 
 5 }
 6 
 7 function add(num) {
 8 
 9     return num + 200;
10 
11 }
12 
13 var result = add(100) //300

 

注意:函數在執行完return語句以後中止並當即退出。

函數種類

函數分爲兩種一種是有名函數,另外一種是匿名函數。例以下面的有名函數

function fun() {

}

若是調用的話,只須要fun()就能夠。

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

function() {}

函數調用是經過函數名來調用,匿名函數怎麼調用呢?一種就是將匿名函數賦給一個變量,讓這個變量充當函數名。另外一種就是用()來調用,例以下面三種方法

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

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

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

例子:

1 (function(x, y) {
2 
3     ​alert(x + y);
4 
5 })(2,3);
6 
7 //alert(5)

 

2和3將會做爲參數傳遞給x和y

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

首先定義一個變量f,而後賦值一個匿名函數,這裏呢須要注意一點函數裏全部變量的定義都會被前置,因此匿名函數裏的執行順序是

 1 var f = (function() {
 2     var f;
 3     function f() {
 4         return 10;
 5     }
 6     function f() {
 7         return 20;
 8     }
 9     return f();
10     f = 30;
11 })(); 

外面的變量f和裏面的變量f不在同一個做用域內(閉包),因此互不影響。​由於函數不能重載,因此外面變量f=(function f() {return 20;})();,因此最終輸出的是20。

相關文章
相關標籤/搜索