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/
它是一个自动执行的功能。您不会调用它,它会自动执行。
如果函数返回某些内容,
这是一个匿名函数,因此除非将其指定给名称,否则不能在创建它的行中调用
1 | var temp = (function() { })(); |
这段代码应该改为
1 | var temp = (function() { }); |
这样你实际上将函数分配给名称。要调用它,只需使用括号
1 | temp() |