#6152·lodash

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