作家
登录

js 函数的副作用分析

作者: 来源:www.28hudong.com 2013-03-30 00:45:58 阅读 我要评论

函数副作用会给程序设计带来不必要的麻烦,给程序带来十分难以查找的错误,并且降低程序的可读性。严格的函数式语言要求函数必须无副作用。 函数的副作用相关的几个概念, 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,运算结果通过函数返回给外部(出口)

  推荐阅读

  jquery jqPlot API 中文使用教程(非常强大的图表工具)

jqPlot是一个非常强大的图表工具,曲线,柱状,饼图,应该有尽有,更要命的是,调用方便~~ 官网:http://www.jqplot.com/ 这里贡献上中文教程,基本上所有的api都很齐全,供有需要的童鞋们瞧瞧,更重要的是作为自己>>>详细阅读


本文标题:js 函数的副作用分析

地址:http://www.17bianji.com/kaifa2/JS/24257.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)