◼ 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念;
◼ 纯函数的维基百科定义:
举例1:
function sum (num1,num2) {
return num1 + num2
}
sum(10,20) //30
sum(10,20) //30
sum(10,20) //30
sum(10,20) //30
sum(10,20) //30
sum(10,20) //30
在任何情况下 sum(10,20) 的结果都必须是 30,不能是其他结果,如果是其他结果就不是纯函数了。
var num = 100
function sum (num1,num2) {
return num1 + num2 + num
}
sum(10,20) // 130
sum(10,20) // 130
num = 200
sum(10,20) // 230 此时,相同的输入,但输出结果不相同
这个时候,函数sum就不是纯函数;
所以,纯函数不能使用闭包。不能使用外层作用域的变量,一旦使用外层作用域的变量,一旦变量发生变化,函数的输出就发生变化。
var address = "火星"
function printInfo(info) {
console.log(info.name, info.age, info.msg);
info.flag = "️"
address = ""
}
var obj = {
name: "why",
age: 18,
msg: "副作用"
}
printInfo(obj)
console.log(obj);