The type-erasure data which is the state of std::function will persist as long as the std::function or its copies live, probably via heap allocation.
The same is not true of the closure, which contains captured variables. That's part of the state of the lambda object, and probably contains the address of a data structure on the stack, which will disappear when the current function returns and the variable lfib goes out of scope.
Remember that you've captured lfib by reference. Therefore any changes to lfib for the remainder of the function have to be visible to the lambda (including but not limited to the initialization). The only way the compiler can manage that in a general way is by storing the address of the local lfib. In your particular case, if lfib is not assigned again, it might be possible for the compiler to store the value immediately post-initialization instead of a reference. But it's not guaranteed, and not even particularly likely.
std::function).