我的代码:自执行功能不起作用?
function (i)
{
alert(i);
}(3);
我不明白为什么我没有看到警报。
这个语法是什么意思?
为什么验证码:
(function (i)
{
alert(i);
}(3))();
不工作?
有什么区别?
我失踪了什么?
我的代码:自执行功能不起作用?
function (i)
{
alert(i);
}(3);
我不明白为什么我没有看到警报。
这个语法是什么意思?
为什么验证码:
(function (i)
{
alert(i);
}(3))();
不工作?
有什么区别?
我失踪了什么?
第一个片段将被解释为函数声明,它需要一个名称并且您的函数没有一个。所以这会导致错误。
用圆括号括起函数定义使函数被解释为函数表达式它不需要名称,所以它是有效的JavaScript。
虽然看起来你在那里做两个调用。应该或者是
(function(i){ alert(i); }(3));
或
(function(i){ alert(i); })(3);
通常可以有功能的表达或者在括号(一切被评价为有表达),或在一个赋值表达式(var a = function...
)的右侧。
参见Section 13 of the ECMAScript 5 specification:
FunctionDeclaration :
functionIdentifier (FormalParameterListopt) {FunctionBody}FunctionExpression :
functionIdentifieropt (FormalParameterListopt) {FunctionBody}
作出快速测试案例,更容易在那里演示:http://jsfiddle.net/xMZbc/ :) –
@Felix Kling http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-封闭件/没有说'link.onclick =函数(NUM){ \t \t \t回报函数(){ \t \t \t \t警报(NUM)的代码; \t \t \t}; \t \t}(i);'......为什么它在那里工作? –
@RoyiNamir:你的意思是内在或外在的功能?外层是因为它是一个赋值表达式,而内层是因为'return'。 –
的()
- 运算符是负责执行的功能,因此这是由()
缠绕的函数表达式立即exectued。
这是不正确的。括号有不同的含义,取决于它们的位置和上下文。放在函数引用之后,它们执行该函数,但在任何其他情况下,它们都作为分组操作。以'var foo =(5 + 3)* 2;'。这里没有涉及功能执行。 –
On FireFox:“SyntaxError:函数声明需要一个名称。” – Thilo