这个javascript代码是什么意思?
你有什么存在:
自调用匿名函数
你首先由具有以函数本身paranthesis创建函数表达式。 只是写
function() {
}()
不会在这种情况下工作,因为这将定义一个函数声明。
所以以后我们有,我们可以通话本身通过附加()
(function() {
})();
要验证,试试这个:
var myval = (function(){return 'self executed!'})();
alert(myval); // === 'self executed'
-
function(){}
- 函数式,它定义一个功能 -
(function(){})
- 包装它就像这样做确保它被视为一种表达 -
(function(){})()
- 添加()
调用功能
然后返回值赋值给变量。
这通常用于允许使用变量而不污染全局范围。
'function() {}'只会是赋值中的表达式。 – jAndy 2011-02-24 07:37:22
@jAndy,不仅在一个赋值中,还有* expression *的其他上下文,例如:'0,function(){}','new function(){}','foo(function(){}) '等等...对语法的限制是在* ExpressionStatement *的层次上的,它不能以'{'或标记'function'开始。在*语句上下文*'function(){}'将只是一个'SyntaxError'(语法不产生匹配)。 – CMS 2011-02-24 08:21:12
@CMS:是的,我只是想说只是'function(){}'不一定是一个表达式。 '+ function(){}()'或'!function(){}()'也可以:-) – jAndy 2011-02-24 08:34:17
这function(){}
定义匿名函数
(封闭)
没有正文。通过将它包装在大括号中并在末尾添加空的参数列表(()
),您正在运行此闭包。这实际上相当于:
var f = function() {};
f();
这会更容易把握吗?
(function(x, y, z){})(1, 2, 3)
这里没有关闭 – aaronasterling 2011-02-24 07:40:47
已更正,thx。只是为了澄清 - 如果函数会使用一些在外部定义的局部变量,那么称它为闭包就足够了吗? – 2011-02-24 08:03:30
它越来越近了。在该范围执行_outside_时,它必须从封闭范围引用局部变量。实际上,这意味着它必须从一个函数中返回,然后除了从一个封闭的范围引用一个本地以外,它被视为封闭。 – aaronasterling 2011-02-24 08:12:43
这将创建一个匿名函数并立即调用它。例如
(function ($) {
// Original JavaScript code.
})(jQuery);
将允许你在那里使用$
,它等于jQuery
。
+1常见示例 - 我总是以';(function ...'开头)(因为我写了分号自由码,这是ASI可能无法按预期工作的一种情况) – 2011-02-24 09:19:21
我们来分析一下它一块一块:
这定义了一个匿名函数(即功能没有名称)
function(){}
当然,在{}
括号之间插入一些指令会更有用。现在
,如果你没有
myval = function(){<something>};
您分配功能MYVAL(函数,而不是它的返回值!)
,那么你可以调用myval()
,这将是一样调用功能本身。
在这里,您可以通过在末尾放置()
来调用函数。因此:
var myval = (function(){})();
调用函数,并把结果myval
(不是函数本身这个时候),它是一个匿名函数的语法在JavaScript中的[什么是括号中的作用 – CarneyCode 2011-02-24 07:31:14
可能重复在下面的一段代码?](http://stackoverflow.com/questions/2938060/whats-the-role-of-the-parentheses-in-the-following-piece-of-code) – 2011-02-24 07:42:19