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)
从它的当前状态,您需要先调用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中,并将对象作为接口返回给模块.