js —— 纯函数

//纯函数 ---> 不对外界产生副作用的函数就叫纯函

纯函数:const sum = function(value1, value2) { return value1 + value2 }

*********************************
只要每次给定相同的输入值,就一定会得到相同的输出值: 例如传入1与2,就一定会得到3
不会改变原始输入参数,或是外部的环境,所以没有副作用
不依頼其他外部的状态,变量或常量
*********************************

非纯函数:
let count = 1;
let increaseAge = function(value) { return count += value }

// 不纯粹(impure),splice会改变到原数组 const firstThree = function(arr) { return arr.splice(0,3) }
// 纯粹(pure),slice会返回新数组 const firstThree = function(arr) { return arr.slice(0,3) }

############################################
//以下都不是纯函数
var name = "xueyou"

function test(){
name="xiaoming"
}

test()
#################################
var obj= {
name:"xueyou"
}

function test(newobj){
//传参,如果复杂类型的, 浅复制
newobj.name="xiaoming"
}
test(obj)
#################################
function test(a){

return Math.random()+"xueyou"+a
}

test(1);

原文地址:https://www.cnblogs.com/yangxueyou/p/9853473.html

时间: 2024-09-30 07:23:49

js —— 纯函数的相关文章

js函数式编程(1)-纯函数

我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文译版难免有时需要思量一番,既然读了就写出来,能方便别人最好,也请读者指正.正文如下. 如果一个函数是纯函数,那么其不依赖外部环境,并且不产生副作用. 1.不依赖外部环境,反例如下: const a1 = 10; const aFunc1 = () => { // 依赖外部变量 return a1;

扯一扯纯函数

函数式编程成了现在编程圈里越来越火的话题.我第一次听说函数式编程是在编译原理课上,那位巨牛逼的年轻老师用普林斯顿大学的教程向我们简单介绍了ML语言,那时候编程和数学基础都巨薄弱的我对“函数”两字产生了极大的恐惧,对于ML的语法完全无法理解.第一次意识到函数式编程是在网上哪篇文章里看到js的函数式编程能力(现在这种文章到处都是),我才发现我最常用的语言原来有这巨牛逼的能力,然后就沾沾自喜的以为自己就是函数式编程的程序员了. 呵呵,挺傻逼的. js极度灵活,的确具有函数式编程的能力,但不是说写个内部

对JS回调函数的一点理解

之前写的异步JS是纯译文,现在刚好工作了2个月,想谈谈我自己对JS回调函数的一点理解,欢迎渴望大家的指正和交流. 回调函数从形式上看就是把函数b作为参数传给函数a,在a的函数体里调用函数b 1 function a(b) { 2 b(); 3 } 4 function b() { 5 ... 6 } 这样做的意义是什么呢 1.控制执行流程,函数b只能在函数a执行后才执行 2.根据不同的需求,可以有各种各样的函数b 3.最重要的,是可以把通过函数a获取的数据传递给函数b 1 function a(

[概念] js的函数节流和throttle和debounce详解

js的函数节流和throttle和debounce详解:同样是实现了一个功能,可能有的效率高,有的效率低,这种现象在高耗能的执行过程中区分就比较明显.本章节一个比较常用的提高性能的方式,通常叫做"函数节流",下面就通过代码实例对此做一下介绍.一.函数节流是什么:在实际编码中,mousemove和resize是使用非常频繁的事件类型(当然还有其他类似事件类型),这样的事件有一个共同的特点,就是在一个普通的操作中,就有可能会在极短的时间内多次执行事件处理函数,会极大的损耗性能,比如resi

js:深入函数的定义

函数定义方式: 1.function fun1(){alert("fun1");}  //函数就是一个非常特殊的对象,是一个Function的实例,其实在内存中存储的操作是通过一个键值对来存储的. 2.由于函数是一个对象,所以可以通过如下方式定义 var fun2 = fun1;  //通过函数拷贝给fun2完成赋值,但fun1.fun2这两个引用并没有指向同一个对象(虽然他们指向的对象的内容是一样的). fun1 = function(){alert("fun111&quo

对JS中函数的理解

函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦

js中函数参数值传递和引用传递

js中函数参数值传递和引用传递:在阅读本章节之前建议参阅一下两章节:1.值类型可以参阅javascript的值类型一章节.2.引用类型可以参阅javascript的引用类型一章节.一.函数传递值类型:代码实例如下: function addNum(num) { num+=10; return num; } var num=10; var result=addNum(num); console.log(num); console.log(result); 以上代码的弹出值分别为:10和20,下面进

JS中函数定义的三种格式

第一种:function  fun1(参数1,参数2...){            //通过创建函数名来定义函数 函数体: } 第二种:var fun2=new Function("参数1,参数2...","函数体");         //通过创建变量来定义函数 第三种:function(){                //匿名函数 函数体: } 说明: 1,在调用时,可以为没有参数的函数传递参数:但如果没有传递参数给有参数的函数时,会默认参数为undefi

在js自定义函数中使用$(event.target)代替$(this)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <ti