JavaScript函数的副作用分析
来源:互联网 发布:linux 修改时间 编辑:程序博客网 时间:2024/05/30 02:53
文章来源:http://www.jb51.net/article/28079.htm
函数副作用 指当调用函数时,除了返回函数值之外,还对主调用函数产生附加的影响。例如修改全局变量(函数外的变量)或修改参数。
函数副作用会给程序设计带来不必要的麻烦,给程序带来十分难以查找的错误,并且降低程序的可读性。严格的函数式语言要求函数必须无副作用。
函数的副作用相关的几个概念, 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
1,函数入口使用参数运算,而不修改它
2,函数内不修改函数外的变量,如全局变量
3,运算结果通过函数返回给外部(出口)
- JavaScript函数的副作用分析
- 什么是函数的副作用?
- 函数的副作用
- 函数的副作用
- 减少函数的副作用
- 函数的副作用
- 函数的副作用定义
- 函数的副作用及其他
- 函数的副作用及其他
- 3.1.16 函数的副作用
- 函数副作用
- 全局变量跨越函数之间的副作用
- 调用函数的副作用~~~~~~带图片解释!!!!!!
- 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇
- javascript闭包的作用域链引出的副作用
- 深入浅出函数副作用
- Shadow滤镜的副作用
- 谈谈副作用的语句
- java&javac&jar命令总结
- HNUST 手势密码
- 在 Shell 提示符中显示 Git 分支名称的方法
- OC语言学习08-属性约束
- ARM处理器工作模式
- JavaScript函数的副作用分析
- javaScript简介(第一章)
- CentOS6下安装ffmpeg
- EhCache初体验
- Scala——集合
- The requested URL /**** was not found on this server
- CASE WHEN的简单用法
- 在Anaconda中安装(非自带的)python包或者更新已有的python包,解决sklearn无法使用的问题
- NDK开发遇到的若干坑