Javascript闭包(使用参数名在同一函数中定义对象)

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

我有下面的代码。需要知道“a”是如何被用作函数参数的,然后在同一个函数中它又被用作对象“a”来调用另一个函数,以及代码末尾的“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
可能会向arg
a
编辑添加一个函数:

为了回答您的实际问题(我最初认为您对代码有问题),代码的
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,则使用
{}
的值—一个空对象