What does this block of JS code mean?
Possible Duplicate:
What is the purpose of wrapping whole Javascript files in anonymous functions like"(function(){ … })()"?
我遇到了一个JS文件,可以汇总到下面的代码:
1 2 3 | (function(window){ // some codes here })(window); |
我想知道这段代码意味着什么? 窗口有特殊含义,还是只是一个参数? 我们在括号中看到的两个"窗口"之间有什么区别?
由于此函数没有名称,我假设它是一个匿名函数,所以它只调用一次吗? 什么时候被调用?
这称为立即调用的匿名函数。 (简称IIAF)
在这种情况下,您将定义一个函数,该函数接受一个名为"window"的参数,该参数将覆盖该范围内的全局
这里的踢球者就是在定义函数之后,你立即调用它,传入全局
大多数情况下,这样做的目的是通过将所有潜在变量包装在匿名范围内来避免污染全局命名空间。
至于你关于
是的,该函数被调用一次,并在定义后立即调用。这是因为它是一个自我调用的匿名函数。
这是一个关闭。有问题的代码是一个匿名函数,它将使用"window"参数(代码段的结尾)执行。它不会污染全局命名空间。
它是一个立即调用的函数表达式。围绕函数表达式(实质上是没有名称的函数声明)的分组运算符()意味着计算所包含的函数并返回函数对象。函数后跟正式参数列表(另一组())会导致函数被调用,因此:
1 2 3 | (function() { alert('hey'); })(); |
创建一个立即调用并运行一次的匿名函数。它不会创建任何全局变量,也不会留下其存在的痕迹。
将标识符
如果您担心引用全局对象,则从全局上下文传递
1 2 3 | (function(global) { // global refernces the global object })(this); |
第一个窗口是形式参数,而第二个窗口是实际调用函数的实际参数。这种类型的函数称为自调用函数。
它的好处是以这种方式包装功能不会混淆全局范围。