这是什么JavaScript

What is this JavaScript

本问题已经有最佳答案,请猛点这里访问。

以下代码会做什么?

我已经使用JS多年了但是不知道这个结构是如何工作的?

1
(function() { /* No implementation yet */ })();

知道没有实现 - 如果有 - 我将如何调用它? 以下是否会成为匿名对象?

1
var temp = (function() {  })();

我可以用作:

1
temp.doWhateverDefined();


您有一个立即调用的函数表达式(IIFE)。它在JavaScript中很常见。


1
(function() { /* No implementation yet */ })();

这称为立即调用函数表达式或简称IIFE。它被立即声明,评估和调用。

基本思路是:

1
2
var x = (function() { return 5;})();
alert(x); //5


它正在立即运行。就像你说的那样:

1
2
var f = function() { /* No implementation yet */ }
(f)();

这是一样的

1
2
var f = function() { /* No implementation yet */ }
f();

它的关键是允许一个代码块(页面初始化等)使用它喜欢的任何变量/函数名称,而不会与可能使用相同名称的其他Javascript代码冲突。所有功能/等。在那个街区宣布的是当地的,不要伤害外面的世界。


你拥有的是一个已经被调用的自调用函数。

1
var temp = (function() {  })();

所以函数必须返回一个函数,以便temp()或temp.somethin();可以被触发。有关详细信息,请参阅下面的示例,

1
2
3
4
5
6
7
8
var temp = (function() { return {
    doWhateverDefined: function () {
        return 'invoked';}
      };  
    }
)();

alert(temp.doWhateverDefined()); //should alert invoked

演示:http://jsfiddle.net/5ch8F/1/


它是一个自动执行的功能。您不会调用它,它会自动执行。

如果函数返回某些内容,var temp = (function() { })();将起作用。


这是一个匿名函数,因此除非将其指定给名称,否则不能在创建它的行中调用

1
var temp = (function() {  })();

这段代码应该改为

1
var temp = (function() {  });

这样你实际上将函数分配给名称。要调用它,只需使用括号

1
temp()