JS-纯函数

纯函数

1.此函数在相同的输入值时,总是产生相同的输出。函数的输出和当前运行环境的上下文状态无关。

纯函数就类似数学中的函数,函数将输入参数映射到返回值,也就是说,对于每套输入,都存在一个输出。

function test(a){
    console.log(a*a);
}
test(10);
test(10);
test(10);
test(10);

2.此函数运行过程不影响运行环境,也就是无副作用(如触发事件、发起http请求、打印/log等)。

一个函数执行过程对产生了外部可观察的变化,那么就说,这个函数是有副作用的。而 纯函数没有产生任何可观察的副作用,也就是说它不能改变任何外部状态。

var num = 18;
function compare(x){
    return x > num;
}
console.log(compare(20))
// 不是纯函数

// 修改一下
var num = 18;
function compare(x){
    return x > 18;
}
console.log(compare(20))

// 传两个参数
var num = 18;
function compare(x,num){
    return x > num;
}
console.log(compare(20,num))
// 并不是使用外部的num 而是自己作用域内的num

3. 如果是引用类型?

var arr = [];
function add(_arr){
    var obj = {name:'cts'};
    _arr.push(obj);
    return _arr;
}
add(arr);
console.log(arr);
// 并不是纯函数  引用类型


// 修改一下
var arr = [{name:'bailibn'}];
function add(_arr){
    var obj = {name:'cts'};
    // 创建一个新的arr
    var newArr = [];
    // 将arr中的内容进行克隆
    for(var i = 0;i<_arr.length;i++){
        // 用克隆方法进行克隆
        newArr[i] = _arr[i];
    }
    newArr.push(obj);
    return newArr;
}
console.log(add(arr))

// 简化一下
function add(x,y){
    return x+y;
}
var num1 = 1;
var num2 = 2;
add(num1,num2);// 纯函数

var GArr = [];
function add(arr){
    arr.push(1);
    return arr;
}
add(gArr);// 不是纯函数


// 废话说了一堆,纯函数有啥用呢?

简单来说,也就是当一个函数的输出不受外部环境影响,同时也不影响外部环境时,该函数就是纯函数,也就是它只关注逻辑运算和数学运算,同一个输入总得到同一个输出。

javascript内置函数有不少纯函数,也有不少非纯函数。

纯函数:

Array.prototype.slice

Array.prototype.map

String.prototype.toUpperCase

非纯函数:

Math.random

Date.now

Array.ptototype.splice

纯函数作用

JavaScript中很容易创建全局变量,这些变量可以在所有函数中访问到。这也是一个导致bug的常见原因,因为程序中的任何部分都可能修改全局变量从而导致函数的行为出现异常加粗样式 纯函数非常容易进行单元测试,因为不需要考虑上下文环境,只需要考虑输入和输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值