【发布时间】:2017-05-22 09:27:41
【问题描述】:
我正试图围绕纯函数展开思考,但我不确定我是否真的理解它。我知道纯函数不应该改变外部状态,只要输入相同,它每次都应该返回相同的输出。
我知道例如这个函数是不纯的,因为它改变了程序其他部分可能使用的购物车变量:
const addToCart = (cart, item) => {
cart.push(item);
return cart;
};
纯状态下的同一个函数:
const addToCart = (cart, item) => {
const newCart = lodash.cloneDeep(cart);
newCart.push(item);
return newCart;
};
这对我来说很有意义。我了解到纯函数应该总是返回一些东西。
但是,我正在处理一些需要我使用 HTML5 画布元素的东西,并且我有这个清除画布的功能:
function clearCanvas(canvas) {
canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
}
我怎样才能使上述函数成为纯函数?我意识到它是不纯的,因为它不返回任何东西,而且它也会改变 canvas 变量的状态。 DOM 操作本质上是不纯的吗?
任何帮助将不胜感激:)
【问题讨论】:
标签: javascript dom canvas functional-programming