首先要有一個概念:不是一個語言支援函數,這個語言就可以叫做「函數式語言」。函數式語言中的函數(function),除了能被呼叫之外,還具有一些其他性質。有以下三點:
1. 函數是運算元
2. 在函數內儲存資料
3. 函數內的運算對函數外無副作用
一、函數是運算元
普通的函數呼叫時,可以抽象的理解為:函數就是一個運算符,傳入的參數是運算元;
但當JavaScript中的函數作為另一個函數的參數使用時,是傳遞引用的,這個「傳入參數」就可以被理解為是一個運算元。由此的結論是,(作為「傳入參數」的)函數具有運算元的意義,「函數參數」與普通參數並沒有什麼不同。
二、在函數內保存資料
在命令式語言中,函數內部的私有變數(局部變數)是不能被保存的。從程式的執行方式上來講,局部變數在堆疊上分配,在函數執行結束後,所佔用的堆疊被釋放。因此函數內的資料不可能被保存。
在JavaScript的函數中,函數內的私有變數可以被修改,而且當再次「進入」到該函數內部時,這個被修改的狀態仍將持續。下面的範例說明了這個特性:
function set_value(v){
value = v;
return value;
}
set = set_value;
}
MyFunc();
}
MyFunc();
}
MyFunc();
console.log( > console.log(get()); //300
所以:JavaScript這項特性只能透過開發人員的程式設計習慣來保證。