js函數的副作用分析_javascript技巧
來源:懂視網
責編:小采
時間:2020-11-27 21:00:17
js函數的副作用分析_javascript技巧
js函數的副作用分析_javascript技巧:函數副作用會給程序設計帶來不必要的麻煩,給程序帶來十分難以查找的錯誤,并且降低程序的可讀性。嚴格的函數式語言要求函數必須無副作用。 函數的副作用相關的幾個概念, Pure Function、 Impure Function、 Referential Transparent。 純
導讀js函數的副作用分析_javascript技巧:函數副作用會給程序設計帶來不必要的麻煩,給程序帶來十分難以查找的錯誤,并且降低程序的可讀性。嚴格的函數式語言要求函數必須無副作用。 函數的副作用相關的幾個概念, Pure Function、 Impure Function、 Referential Transparent。 純

函數副作用會給程序設計帶來不必要的麻煩,給程序帶來十分難以查找的錯誤,并且降低程序的可讀性。嚴格的函數式語言要求函數必須無副作用。
函數的副作用相關的幾個概念, Pure Function、 Impure Function、 Referential Transparent。
純函數 ( Pure Function )
輸入輸出數據流全是顯式(Explicit)的。 顯式(Explicit)的意思是,函數與外界交換數據只有一個唯一渠道——參數和返回值。函數從函數外部接受的所有輸入信息都通過參數傳遞到該函數內部。函數輸出到函數外部的所有信息都通過返回值傳遞到該函數外部。
非純函數 ( Impure Function )
與之相反。 隱式(Implicit)的意思是,函數通過參數和返回值以外的渠道,和外界進行數據交換。比如讀取/修改全局變量,都叫作以隱式的方式和外界進行數據交換。
引用透明 ( Referential Transparent )
引用透明的概念與函數的副作用相關,且受其影響。 如果程序中兩個相同值得表達式能在該程序的任何地方互相替換,而不影響程序的動作,那么該程序就具有引用透明性。它的優點是比非引用透明的語言的語義更容易理解,不那么晦澀。純函數式語言沒有變量,所以它們都具有引用透明性。
以下示例說明了引用透明與函數副作用的結合
代碼如下:
result1 = (fun(a) + b) / (fun(a) -c);
temp = fun(a);
result2 = (temp + b) / (temp -c);
如果函數沒有副作用,那么result1和result2將是等價的。然而如果fun有副作用,比如讓b或c加1,那么result1和result2將不相等。因此,副作用違背了引用透明性。
在JavaScript中,引入了函數。但顯然JS中的函數可以訪問、修改全局變量(或定義在函數外的變量),如下
代碼如下:
var a = 5;
function fun(){
a = 10;
}
fun(); // a 變成了10
JS中要想保證函數無副作用這項特性,只能依靠編程人員的習慣,即
1,函數入口使用參數運算,而不修改它
2,函數內不修改函數外的變量,如全局變量
3,運算結果通過函數返回給外部(出口)
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
js函數的副作用分析_javascript技巧
js函數的副作用分析_javascript技巧:函數副作用會給程序設計帶來不必要的麻煩,給程序帶來十分難以查找的錯誤,并且降低程序的可讀性。嚴格的函數式語言要求函數必須無副作用。 函數的副作用相關的幾個概念, Pure Function、 Impure Function、 Referential Transparent。 純