如何调用这个javascript函数,它使用的是什么模式?

min*_*eow 5 javascript closures

我在示例代码中遇到了这种类型的函数,它看起来被广泛使用.但我无法弄清楚如何调用它,或者实际上,它代表什么样的模式.

 l = function (a1){
  someVar = {
    someFn: function(a2){
       console.log(a1);
       console.log(a2);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎么去执行someFn?这与封闭有关吗?

更新:

这就是代码的使用方式.正如@ joseph-the-dreamer猜测的那样,它被用作模块的一部分,其中:

  App.module("Module", function(a1) {
      someVar = {
        someFn: function(a2){
           console.log(a1);
           console.log(a2);
        }
      }
  })
Run Code Online (Sandbox Code Playgroud)

Jos*_*eph 7

从它的当前状态,您需要先调用l设置someVar为访问someFn.否则,您根本无法访问someFn.

但是,如果没有任何变量声明someVar,调用l将创建一个隐含的全局 someVar.隐含的全局变量不是一个好习惯.你应该在someVar某个地方宣布,即使你认为它是一个全球性的.

var someVar;

l = function (a1){
  someVar = {
    someFn: function(a2){
       console.log(a1);
       console.log(a2);
    }
  }
}

l(1);
someVar.someFn(2);

//1
//2
Run Code Online (Sandbox Code Playgroud)

您也可以从呼叫返回someVarl访问someVar.注意,这次someVar是一个局部变量l.

var l = function (a1){
  var someVar = {
    someFn: function(a2){
      console.log(a1);
      console.log(a2);
    }
  }
  return someVar;
}

l(1).someFn(2);
Run Code Online (Sandbox Code Playgroud)

至于模式,我认为你所拥有的是模块模式的不完整形式.通常,模块模式将事物包装在IIFE中,并将对象作为接口返回给模块.

  • 如果`someVar`在`l`的赋值之上声明怎么办? (2认同)