曾经,在一个小村庄里,有一个数学家约翰喜欢解决数学问题。约翰曾经为他村里的孩子们教授数学。有一天,约翰在向他的学生解释了功能,他告诉他们一个功能是一组可以重复使用的说明。
约翰向他的学生解释说,JavaScript,纯粹的功能和不纯净的功能中有两种功能。
他说,无论何时或在何处,纯函数总是返回相同输入的相同输出的功能。纯函数没有任何副作用,这意味着它们不会在范围之外修改任何变量,并且它们也不会以任何方式与外界互动。
另一方面,不纯净的函数是并非总是返回相同输入的相同输出的功能,并且它们可能会在其范围之外修改变量或以某种方式与外部世界进行交互。
为了向他的学生解释,约翰以纯粹和不纯净的功能为例。
`
您可以通过以下方式深入研究它:
简单地说,纯函数没有内部状态。因此,在纯粹功能中执行的所有操作都不受其状态的影响。结果,无论您运行多次函数多少次,相同的输入参数都将给出相同的确定性输出。要获得更好的理解,让我们考虑以下示例。
`函数add(a,b){
返回A + B
}
console.log(add(4,5))
`
此示例包含一个简单的add()函数,该函数将9作为输出。这是一个非常可预测的输出,并且不取决于任何外部代码。这使add()函数成为纯函数。
如果声明一个函数纯净并且没有状态,则可以在类中共享许多实例。另外,建议避免纯函数内的突变。
纯函数的优点
- 纯函数可作为独立函数,可为相同输入提供相同的输出。
- 由于独立行为,纯函数是可读的。而且,它们很容易调试。
- 您可以将外部状态克隆到纯函数中,但不会改变函数的纯度。
不纯粹的功能
不纯净的函数是包含一个或多个副作用的函数。它在其词汇范围之外突变数据,并且无法预测的相同输入产生相同的输出。
例如,考虑以下代码段:
`var addnew = 0;
函数添加(a,b){
addNew = 1;返回a + b + addnew}
console.log(add(4,5))
`
在上面的示例中,有一个名为AddNew的变量,并且在add()函数之外声明。但是该变量的状态在add()函数中更改。因此,add()函数对范围外部变量具有副作用,因此被认为是不纯净的函数。
JavaScript不遵守严格的功能纯度和不变性的概念。您开发的任何程序都需要不纯粹的功能来修改JavaScript变量(命名内存位置)。
总的来说,最好将程序的不纯净要素与数据处理不同,这通常是纯粹的。另外,如果将不纯的元素限制在其特定功能中,更新和维护应用程序将变得容易得多。
不纯粹功能的示例:
Math.random(),date.now(),arr.splice(),arr.push(),arr.sort()
不纯粹功能的优势
- 不纯净的功能可以使用原位解决方案来降低空间的复杂性。
- 在不纯净的功能中,可以修改状态以使用父变量并呼吁编译功能。
- 如前所述,JavaScript中纯函数和不纯粹的功能之间的主要区别是副作用。因此,让我们讨论有关副作用的一些细节。
纯函数与不纯粹的功能
让我们比较和对比纯函数和不纯粹的功能之间的差异:
- 纯函数没有副作用。不纯净的功能会引起副作用。
- 如果使用相同的输入参数,则纯函数返回相同的输出。但是,当我们多次通过相同的参数时,不纯净的功能会产生不同的结果。
- 纯函数总是返回一些结果。不纯净的功能可以执行而无需产生任何内容。
- 调试纯函数比调试不纯粹的功能要容易。
- 纯函数无法执行AJAX呼叫或标准DOM操作。
- 不纯净的功能本质上是错误的。他们只是在意大利面条代码的形式中会在更广泛的系统中引起一些混乱 。