什么是函数的副作用——明白js编程中函数的副作用

什么是函数副作用? 函数副作用是指当挪用函数时,除了返回函数值之外,还对主挪用函数发生附加的影响。副作用的函数不仅仅只是返回了一个值,而且还做了其他的事情,好比: 1、修改了一个变...

什么是函数副作用?

函数副作用是指当挪用函数时,除了返回函数值之外,还对主挪用函数发生附加的影响。副作用的函数不仅仅只是返回了一个值,而且还做了其他的事情,好比:

1、修改了一个变量
2、直接修改数据结构
3、设置一个工具的成员
4、抛出一个异常或以一个错误终止
5、打印到终端或读取用户输入
6、读取或写入一个文件
7、在屏幕上绘图


函数副作用会给程序设计带来不必要的贫苦,给程序带来十分难以查找的错误,而且降低程序的可读性,严酷的函数式语言要求函数必须无副作用。   


纯函数 ( 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,运算效果通过函数返回给外部(出口)  


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1176

  • 发表于 2021-02-15 08:40
  • 阅读 ( 239 )
  • 分类:互联网

0 条评论

请先 登录 后评论
w小宇
w小宇

699 篇文章

你可能感兴趣的文章

相关问题