javascript函数调用

javascript函数调用,javascript,function,Javascript,Function,在阅读javascript函数时,我了解到您可以在定义函数后立即调用它: al = function(string){ alert(string) }("test"); 但是你不能用空的paren做同样的事情: al = function(){ alert("test") }(); 相反,您必须将函数转换为函数表达式: al = (function(){ alert("test") })(); 为什么会这样?为什么第一个代码示例在没有此转换的情况下可以正

在阅读javascript函数时,我了解到您可以在定义函数后立即调用它:

al = function(string){
      alert(string)
}("test");
但是你不能用空的paren做同样的事情:

al = function(){
      alert("test")
}();
相反,您必须将函数转换为函数表达式:

al = (function(){
      alert("test")
})();

为什么会这样?为什么第一个代码示例在没有此转换的情况下可以正常工作?

您的三个示例或多或少都是相同的。请注意,
al=
在功能上没有任何作用,因为这些函数都不返回任何内容,因此
al
将是
未定义的。如果他们确实返回了某些内容,则会将其分配给
al
al=
是前两个表达式语法正确所必需的

第一个例子的不同之处在于它需要一个参数。其他两个没有,但这对表达式的工作方式没有影响


括号也可用于表示表达式。例如,
(function(){})(
是有效语法,但
function(){}()
不是
=
还发出表达式的信号,因此
variableName=function(){}()
也可以工作。

您正在考虑其他问题。你所有的例子都有用。您可能指的是没有赋值的情况,因为在这种情况下,前导关键字
function
表示函数声明,而不是以匿名函数开头的函数调用表达式。如果您的第二个情况不起作用,我会感到惊讶!!啊,好的,那么如果我在没有作业的情况下完成上述所有操作,它们将中断?是的,请在没有作业的情况下重做第二个,看看会发生什么。这些操作都是按原样工作,而不是按原样工作。从第一个或第二个示例中去掉
al=
将创建一个声明,后面不能调用括号。从第三个括号中去掉它,额外的括号仍然使它成为一个表达式。