1

下面的代码会做什么?

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

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

知道没有实现 - 如果有 - 我将如何调用它?下面会创建一个匿名对象吗?

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

我可以用作:

temp.doWhateverDefined();
4

6 回答 6

4

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

于 2013-05-10T17:21:59.777 回答
2
(function() { /* No implementation yet */ })();

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

基本思想是:

var x = (function() { return 5;})();
alert(x); //5
于 2013-05-10T17:23:11.717 回答
1

它正在立即运行。好像你说:

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

这与

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

它的重点是允许代码块(页面初始化等)使用它喜欢的任何变量/函数名称,而不会与可能使用相同名称的其他 Javascript 代码冲突。所有功能/等。在该块中声明的是本地的,并且不会伤害外部世界。

于 2013-05-10T17:23:01.107 回答
0

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

var temp = (function() { })();如果函数返回一些东西,它将起作用。

于 2013-05-10T17:22:01.010 回答
0

这是一个匿名函数,因此您只能在创建它的行中调用,除非您将其分配给名称

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

这段代码应该改成

var temp = (function() {  });

这样,您实际上将功能分配给名称。要调用它,只需使用括号

temp()
于 2013-05-10T17:21:13.680 回答
0

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

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

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

var temp = (function() { return {
    doWhateverDefined: function () {
        return 'invoked';}
      };  
    }
)();

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

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

于 2013-05-10T17:26:02.800 回答