js 函数的副作用分析


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



相关阅读:
asp.NET开发中正则表达式中BUG分析
多字段模糊搜索的函数
JS 日历控件(蓝色)
网页变灰配合全国哀悼日的css代码 20100421
Linux下创建自解压tar文件
JavaScript 实现 Konami Code
js 返回时间戳所对应的具体时间
二十行语句实现从Excel到mysql的转化
blockquote标记应用注意
实例解析 用Linux操作系统构建的路由器
编写线程安全的JSP应用程序
div结合css布局bbs首页(div+css布局入门)
Fedora 4升级到Fedora 9
Linux操作系统上去掉文件属性的命令介绍
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 我发现蚂蚁搬家的奥秘作文300字 2016世界卫生日主题演讲稿大全 2015羊年春节拜年祝福语集锦 新疆高考满分作文范文 五年级试卷:五 年 级 语 文 试 卷 穿梭大街小巷的人 地方高校法学本科职业化教育探索的新思路 散文:难忘的回忆 积极应对职场上种种不公 互相信任不需要理由 《赤壁赋》教学设计及教学反思 第一次的离别作文400字 观看六年级艺术表演 伤离别作文1600字 个人党性分析材料[区委办公室版区委组织部版] 妈妈的骄傲 【精品】2014年会策划方案 篮球陪伴我成长 快乐,真的很简单作文1100字 繁花散落,何时败尽 形容树优美的句子 沁人心脾 学会生存学会坚强 珍藏在心中的那段记忆作文800字 老猴王和老虎 小学生作文我的春节 第10课 论快乐备课资料 灭蝇将军700字 失去了才懂得珍惜400字 生命。 留下一颗蒲公英 乡村医生述职报告三篇 小说读后感作文400字 镜湖的柳树 我的弟弟_关于描写弟弟的小学生作文900字 2.49……忆 2015医院住院部个人年度工作总结 双代会演讲稿 我爱你-家乡的山和水 以成长为话题作文400字 东湖的美 入团申请书范文初中格式 诗题情缘随流水,笔走风雨任落花 重游婺源 手工比赛作文300字 2015安徽合肥中考作文范文:难忘那父亲的眼神 远足作文500字 科学课教学心得体会 2015企业信用管理制度 小学六年级作文550字:感恩生命 学校德育老师2016年度述职述廉报告

Copyright © 2016 phpStudy |