(…args) => fn(…args) 有没有垃圾回收的问题?
const adder = (…args) => dispatch(…args)。 // dispatch 可以任意普通函数。
我看到 redux 源码里面也是这么用,甚至很多开源 react 项目是这么写。最近和面试官讨论,对方说这样会产生闭包,甚至有内存泄漏的风险。
我回头 chrome 再测试调试一下,好像没有看到有闭包。不知道是不是我的理解有问题
const adder = (…args) => dispatch(…args)。 // dispatch 可以任意普通函数。
我看到 redux 源码里面也是这么用,甚至很多开源 react 项目是这么写。最近和面试官讨论,对方说这样会产生闭包,甚至有内存泄漏的风险。
我回头 chrome 再测试调试一下,好像没有看到有闭包。不知道是不是我的理解有问题
不过还是要讲个例子(浏览器的 bug): https://bugs.chromium.org/p/chromium/issues/detail?id=315190
var someClass = function() {
console.log(‘some’);
};
function getter() {
var some = new someClass();
if(true) {
return function() { //I’m done with some and don’t need it
return null;
};
} else {
return function() {
return some;
};
}
}
window.f = getter();
这个代码执行完理论上变量 some 会被回收, 因为 closure 没有 catch 住 some, 但通过 devtools 里 memory – [heap snapshot] 可以发现 变量 some 没有被 GC.
所以, 这就是定义一个变量都有「有内存泄漏的风险」.
function mapDispatchToProps(dispatch) {
return {
adder: (…args) => dispatch(‘function name’, …args),
}
}
connect(mapStateToProps, mapDispatchToProps)(Component)
————————-
而如果这个 dispatch 函数作为当前函数的内声明的函数,并且该函数返回 adder,是有闭包。