2017-08-11 63 views
0

对不起,这是如此模糊,但我相信如何问这个,只是因为我不知道它是什么。我以前见过这个,但我不记得它在做什么或在哪里寻找它。这些封装括号在JavaScript中意味着什么?

这段代码用外括号和“窗口”做什么?

(function(angular){ 
//some code 
})(window.angular); 

我真的很抱歉。在我得到一些官方文档的参考之后,我会删除这篇文章。

+2

语法中含有'function'关键字的含糊不清。当它是语句中的第一个标记时,该语句被视为函数声明。在你发布的代码中,函数实例需要被解释为一个函数*表达式*,所以括号将解析器翻译为“表达式解析”模式,并且一切正常。 – Pointy

+3

它看起来像一个[IIFE](http://benalman.com/news/2010/11/immediately-invoked-function-expression/) – zer00ne

+1

@MrGeek:看起来是这样,但我甚至不知道这是什么这是,所以我没有办法查询“匿名函数语法” –

回答

2

这是IIFE(立即调用函数表达式)的一个例子。请参阅here以获取更多解释。

第一部分

(function(angular){ 
//some code 
}) 

是一个匿名函数(它没有名字)。既然你想立即执行它(页/ DOM加载时),你只需要调用它像任何其他功能

(window.angular); 

..with一个括号,参数和分号。 您的参数(window.angular)只是一个全局对象(这就是为什么它在window范围内定义的原因)。

简而言之,您正在使用全局定义的参数来执行该函数主体。

+0

好的,这和通常的“document.ready(function(){})有什么区别”这样做的方式? –

+0

对不起,第五次再次阅读。因此,document.ready版本没有提供将参数放入函数的机会,并且它不能让您在别处调用此函数在你的javaScri的hedgemaze中点文件...如果我正确理解这一点? –

+0

@SageKelly正如你所说的,在加载DOM时,'document.ready'也可以用来初始化/执行代码。不同的是,你必须记得这样做。 IIFE由浏览器自动执行。如果您正在编写一组只能由范围对象访问的函数(在您的情况下为'window.angular'),那么这是一个更好的方法。第三方库通常遵循这条路线,因为你所要做的只是包含JS文件引用。 –

相关问题