Javascript闭包(使用参数名在同一函数中定义对象)
我有下面的代码。需要知道“a”是如何被用作函数参数的,然后在同一个函数中它又被用作对象“a”来调用另一个函数,以及代码末尾的“a |{}”是什么意思Javascript闭包(使用参数名在同一函数中定义对象),javascript,Javascript,我有下面的代码。需要知道“a”是如何被用作函数参数的,然后在同一个函数中它又被用作对象“a”来调用另一个函数,以及代码末尾的“a |{}”是什么意思 E.martin= function (a) { a = mergein({ api_url: "/somefolder/", json_parameter: false, channel_id: null, after_response_hook: null}, a
E.martin= function (a) {
a = mergein({ api_url: "/somefolder/",
json_parameter: false,
channel_id: null,
after_response_hook: null},
a || {});
我能回答a |{};部分 这是一种检查“a”是否已经存在的方法。如果有,则使用它,如果没有,则将其创建为新对象
//Here 'a' is a function arg
E.martin= function (a) {
//Here 'a' is overwritten by the returned value from mergein
a = mergein({ api_url: "/somefolder/",
json_parameter: false,
channel_id: null,
after_response_hook: null},
//Here 'a' is send to the function, if it's not null/false.
//if 'a' is null/false an empty object will be created and sent instead.
a || {});
mergein
可能会向arga
编辑添加一个函数:
为了回答您的实际问题(我最初认为您对代码有问题),代码的a |{}
部分说“要么使用'a',要么如果没有定义'a',那么使用一个新的空对象({})”
建议:
我建议您在E.martin
方法中返回a,因为JavaScript中的对象不是硬引用的。如果不返回结果,则可能会丢失发送给该方法的原始对象
假设mergein
是一种连接两个对象的方法:
function mergein(new_obj, old_obj){
for(var i in new_obj){
old_obj[i] = new_obj[i];
}
return old_obj;
}
如果我们使用您的原始方法,当我们返回结果时,我们将丢失原始对象键/值:
E.martin = function (a) {
a = mergein({ api_url: "/somefolder/",
json_parameter: false,
channel_id: null,
after_response_hook: null},
a || {});
}
var b = {foo:'bar'};
var result = martin(b);
console.log(result['foo']); // error
如果我们返回a
对象,我们将使用添加的键/值返回原始对象:
E.martin = function (a) {
return mergein({ api_url: "/somefolder/",
json_parameter: false,
channel_id: null,
after_response_hook: null},
a || {});
}
var b = {foo:'bar'};
var result = martin(b);
console.log(result['foo']); // 'bar'
“a | |{}”表示如果a不是null、未定义或false,则使用缩写{}创建一个新对象。它与| |新对象()相同
a |{}
简单地表示,如果a
为null、未定义或以其他方式计算为false,则使用{}
的值—一个空对象