我试图围绕纯函数进行思考,但我不确定我是否真的理解它。我知道纯函数不应该改变外部状态,并且只要它具有相同的输入,它每次都应该返回相同的输出。
我知道例如这个函数是不纯的,因为它改变了程序其他部分可能使用的 car 变量:
const addToCart = (cart, item) => {
cart.push(item);
return cart;
};
Run Code Online (Sandbox Code Playgroud)
纯状态下的相同函数:
const addToCart = (cart, item) => {
const newCart = lodash.cloneDeep(cart);
newCart.push(item);
return newCart;
};
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义。我了解到纯函数应该总是返回一些东西。
但是,我正在处理一些需要我使用 HTML5 画布元素的东西,我有这个功能可以清除画布:
function clearCanvas(canvas) {
canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能使上述函数纯?我意识到它是不纯的,因为它不返回任何东西,而且它改变了画布变量的状态。DOM 操作本质上是不纯的吗?
任何帮助,将不胜感激 :)