Because for it to work without binding, you need to pass the icon to the IconRetriever. And that was one of the reasons it weren't reentrant (when the app installation finished before the icon was downloaded it would keep the rocket icon instead of downloading/applying the right one). And since you're creating a new function for each call anyway, it seems to make more sense for it to be a bound function.