Вы создали функцию, которая принимает аргумент с именем foo .Эта локальная переменная переопределит глобальную переменную с тем же именем.Если вы ничего не передаете для этого аргумента, локальный foo автоматически устанавливается на undefined .Вы можете удалить аргумент или передать глобальный foo .
var foo2 = function (foo) {
var that;
that = $.extend(true, {}, foo); // foo is from the local scope
return that;
}(foo); // Pass in foo
или
var foo2 = function () { // remove the argument
var that;
that = $.extend(true, {}, foo); // foo is from the global scope
return that;
}();