cloneDeep behaves differently for top-level-functions than for nested ones
Author: njoAICreated Mar 30, 2026Updated Jul 12, 2026
Labelsquestion
Reproduction
function halloWelt(){
console.log('Hallo Welt')
}
var directClone = _.cloneDeep(halloWelt);
var indirectClone = _.cloneDeep({
result: halloWelt
}).result;
console.log('isEqual:', _.isEqual(directClone, indirectClone)); // isEqual: false
console.log('directClone:', directClone); // directClone: {}
console.log('indirectClone:', indirectClone); // indirectClone: function halloWelt()
Expected
The isEqual should return true.
Actually
false is returned. This is because the function, when directly cloned, becomes an empty object. If cloned indirectly - nested in an object - it stays a function.
Workaround
Wrap everything you clone (or wrap the cloneDeep function to do it for you)...
Thank you for your hard work
Source: lodash/lodash