JavaScript函式式程式設計之副作用

2021-09-20 07:37:36 字數 1260 閱讀 6805

概念:

***是在計算結果的過程中,系統狀態的一種變化,或者與外部世界進行的可觀察的互動。

上文中的純函式的概念很嚴格,這個***的概念也是。它的要求很高,概括的講,只要是跟函式外部環境發生的互動就都是***。從「***」這個詞語來看,它更多的情況在於「改變系統狀態」。

在教程中列舉的一些***:

如果完全沒有***,那我們的**就是單純的跑一遍浪費了一點電而已,除此之外什麼都沒有發生,這樣的話我們寫**就沒有意義了。所以,在js中,我們的目的不是完全消除***注1,而是避免那些不應該出現的***。

js原生的方法中,map就很函式式,他會返回乙個新的陣列,不會改變原陣列。而pop這種方法就很不好,它在操作了陣列之後,也改變陣列本身。

所以當我們要使用那些有***的方法寫純函式的時候,記得做一次深拷貝:

例1

const mypop = x =>

const a = 5;

function a(b)

a(5);

function foo(x) 

function bar(y)

foo(1);

function foo(fn, x) 

function bar(y)

foo(bar, 1);

function foo(fn) 

}function bar(y)

foo(bar)(1);

function foo(fn, x) 

function bar(y)

bar = undefined;

foo(bar, 1);

const foo = function(fn, x) 

const bar = function(y)

bar = undefined; // error

foo(bar, 1);

個人建議用const的方式,這樣更加的安全,即便出錯也可以快速定位。

注釋:

原文發布時間為:2023年06月14日

掘金

javascript函式式程式設計 遞迴函式

遞迴運算 使用尾遞迴可以避免遞迴的消耗記憶體的問題 遞迴是函式對自身的呼叫 遞迴的組成 遞迴呼叫 遞迴終止條件 if語句來進行控制 呼叫的形式 有直接呼叫 和 間接呼叫兩種方式 直接呼叫 若果在呼叫函式f 的過程中,又要呼叫f 間接呼叫 呼叫f1 的過程中又要呼叫f2 而在呼叫f2 的過程中又要呼叫...

javascript函式式程式設計一例分析

js像其他動態語言一樣是可以寫高階函式的,所謂高階函式是可以操作函式的函式。因為在js中函式是乙個徹徹底底的物件,屬於第一類公民,這提供了函式式程式設計的先決條件。下面給出乙個例子 出自一本js教程,功能是計算陣列元素的平均值和標準差,先列出非函式式程式設計的一種寫法 var data 1,1,3,...

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...