这个javascript代码是什么意思?

问题描述:

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

我不明白(function..)的含义,甚至其他代码。这个javascript代码是什么意思?

+0

(不是函数本身这个时候),它是一个匿名函数的语法在JavaScript中的[什么是括号中的作用 – CarneyCode 2011-02-24 07:31:14

+0

可能重复在下面的一段代码?](http://*.com/questions/2938060/whats-the-role-of-the-parentheses-in-the-following-piece-of-code) – 2011-02-24 07:42:19

你有什么存在:

自调用匿名函数

你首先由具有以函数本身paranthesis创建函数表达式。 只是写

function() { 
}() 

不会在这种情况下工作,因为这将定义一个函数声明。

所以以后我们有,我们可以通话本身通过附加()

(function() { 
})(); 

要验证,试试这个:

var myval = (function(){return 'self executed!'})(); 

alert(myval); // === 'self executed' 

  • function(){} - 函数式,它定义一个功能
  • (function(){}) - 包装它就像这样做确保它被视为一种表达
  • (function(){})() - 添加()调用功能

然后返回值赋值给变量。

这通常用于允许使用变量而不污染全局范围。

+1

'function() {}'只会是赋值中的表达式。 – jAndy 2011-02-24 07:37:22

+1

@jAndy,不仅在一个赋值中,还有* expression *的其他上下文,例如:'0,function(){}','new function(){}','foo(function(){}) '等等...对语法的限制是在* ExpressionStatement *的层次上的,它不能以'{'或标记'function'开始。在*语句上下文*'function(){}'将只是一个'SyntaxError'(语法不产生匹配)。 – CMS 2011-02-24 08:21:12

+0

@CMS:是的,我只是想说只是'function(){}'不一定是一个表达式。 '+ function(){}()'或'!function(){}()'也可以:-) – jAndy 2011-02-24 08:34:17

function(){}定义匿名函数 (封闭) 没有正文。通过将它包装在大括号中并在末尾添加空的参数列表(()),您正在运行此闭包。这实际上相当于:

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

这会更容易把握吗?

(function(x, y, z){})(1, 2, 3) 
+0

这里没有关闭 – aaronasterling 2011-02-24 07:40:47

+0

已更正,thx。只是为了澄清 - 如果函数会使用一些在外部定义的局部变量,那么称它为闭包就足够了吗? – 2011-02-24 08:03:30

+0

它越来越近了。在该范围执行_outside_时,它必须从封闭范围引用局部变量。实际上,这意味着它必须从一个函数中返回,然后除了从一个封闭的范围引用一个本地以外,它被视为封闭。 – aaronasterling 2011-02-24 08:12:43

这将创建一个匿名函数并立即调用它。例如

(function ($) { 
    // Original JavaScript code. 
})(jQuery); 

将允许你在那里使用$,它等于jQuery

+0

+1常见示例 - 我总是以';(function ...'开头)(因为我写了分号*码,这是ASI可能无法按预期工作的一种情况) – 2011-02-24 09:19:21

我们来分析一下它一块一块:

这定义了一个匿名函数(即功能没有名称)

function(){} 

当然,在{}括号之间插入一些指令会更有用。现在

,如果你没有

myval = function(){<something>}; 

您分配功能MYVAL(函数,而不是它的返回值!)

,那么你可以调用myval(),这将是一样调用功能本身。

在这里,您可以通过在末尾放置()来调用函数。因此:

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

调用函数,并把结果myval