var fields = {date:{type:'date'}};
var createField = function(field, settings)
{
var myArgs = {};
myArgs = fields[field];
console.log(fields[field]);
console.log(myArgs);
console.log(settings);
if('label' in settings && settings.label) myArgs.label = settings.label;
// write html
var html = '';
myArgs = null;
return html;
}
var type = 'date';
createField(type, {label:'Date of Birth'});
// log prints no "label" in fields[field] or myArgs, but does in settings
createField(type, {});
// log prints label of "Date of Birth" in both fields[field] and myArgs, but not in settings
WTF?
换句话说,我的函数从头开始创建一个变量,我在代码中的其他任何地方都没有使用它:myArgs
。它从页面顶部不变的声明中获取有关字段的args。如果传递给函数的settings
有标签,则会将标签添加到myArgs
变量。然后在返回退出函数之前,我清除myArgs
。
label
每次在myArgs
传递后都会显示在settings
中,即使后续settings
没有传递它也是如此。
编辑 FTR,label
不应在myArgs
或fields[field]
中打印。它在后者中不存在,并且在前者打印时不应该存在YET。
*更新* 小提琴:https://jsfiddle.net/Lxqvt6mk/2/
答案 0 :(得分:0)
您将fields.date
分配给myArgs
,然后修改myArgs
。修改myArgs
正在修改fields.date
,因为maArgs
是指它。它是一个对象。将其分配给变量时,它不会被复制。您只需要对内存中的同一个对象进行两次引用。您可以在调用函数之前和之后比较fields
的值。
下次,请在粘贴前检查您的代码。最好的解决方案是插入一个可运行的代码段。
祝你好运!