2013-03-19 30 views
0

嗨我是新来的JavaScript和我想维护someones代码,但我似乎无法弄清楚他们在做什么。Javascript怪异的方式声明和调用函数

他们似乎声明一个函数,像这样:

(function(Module) { 
    Module.register(...) { 
     .... 
     return ...; 
    }; 
    Module.register(...) { 
     .... 
     return ...; 
    }; 
}(hb.Core)); 

如果你想创建一个调用Module.register两倍(这是我认为他们正在尝试做的)功能,不会你做以下?

function myFunction(Module) { 
    Module.register(...) { 
     ... 
    }; 
    Module.register(...) { 
     ... 
    }; 
} 
myfunction(Module); 

而且,不知道这是不是真的有关,但他们使用的沙箱模型(他们有不同的模块只有通过沙箱与应用程序的核心通信)。

希望有人可以帮忙。我对Javascript和前端开发非常陌生,我非常困惑。

+0

从你向我们展示了什么,第一部分看起来像一个错误。 – 2013-03-19 17:58:36

+0

你看过http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work – sircapsalot 2013-03-19 17:58:47

+2

通过将函数包装在圆括号中,创建了一个函数表达式,它不污染全球范围。 – Shmiddty 2013-03-19 17:58:51

回答

2

重复What is the purpose of a self executing function in javascript?

它执行的匿名函数调用的自我。你的例子是一个函数声明,你已经为函数指定了一个名字,所以它不再是匿名的。当需要将变量的范围限制为只对自执行函数中的任何内容可用时,就使用自执行函数。

+0

谢谢!我以为那是做什么,但不是太确定 – user2158382 2013-03-19 19:20:07

+0

高兴地帮助:) – iAmClownShoe 2013-03-19 19:22:35

0

如果你的意思是功能

(function(Module) {}(hb.Core)); 

这是自调用函数接收其Module参数hb.Core值。 在JavaScript函数声明范围,所以这是上面的主要原因。

该函数内部变量是不是它的访问之外,这意味着在它之外的范围