当我编码:
var a =
function()
{
alert("44")
return function(){alert(33)}
}()();
是按以下顺序评估此表达式吗?
如果是,如果我这样做,为什么会出现语法错误:
function()
{
alert("44")
return function(){alert(33)}
}();
解释器首先想要一个左操作数......
但这种语法有效:
(
function()
{
alert("44")
return function(){alert(33)}
};
)()
外括号是什么意思???
由于
答案 0 :(得分:3)
function() { alert("44") return function(){alert(33)} }
定义功能 function() { alert("44") return function(){alert(33)} }
的 ()
你调用该函数返回匿名函数 function(){alert(33)}
function() { alert("44") return function(){alert(33)} }()
的 ()
你调用返回的函数,所以它实际上等同于 function(){alert(33)}()
所以整个执行相当于:
alert("44"); alert(33);
答案 1 :(得分:3)
这是该语言的语法。如果要在就地执行匿名函数,则必须将其括在parens中。
JS有这些边缘情况,其语法比你期望的更怪异。举例来说,评估一个具有JSON的字符串不起作用,除非它用parens包装。
// Wrong
eval("{ ... }");
// Right
eval("({ ... })");
这是该语言的语法。
那就是说,我认为(这是严格意义上的恕我直言),你所概述的步骤并不准确。
答案 2 :(得分:0)
我也在学习自我调用功能
我认为代码应该是
3. (function() { alert("44"); return function(){alert(33);} })()()