编辑:表达式function foo() {return 20;}, foo()意味着是一个单一的参数console.log).
这个:
console.log((function foo() {return 20;}, foo()));Run Code Online (Sandbox Code Playgroud)
不行,我得到ReferenceError因为foo没有定义.
为什么?
console.log(function foo() {return 20;}, foo());
Run Code Online (Sandbox Code Playgroud)
在此代码中,您将一个named(foo)函数作为参数传递给console.log.得到它了?你从来没有声明过函数foo,你只是将它作为一个参数传递.在javascript中,函数声明和函数表达式具有相同的语法,因此存在混淆.
也就是说,传递命名(而不是匿名)函数几乎总是无用的.您的代码等同于:
console.log(function () {return 20;}, foo());
Run Code Online (Sandbox Code Playgroud)
function () {return 20;}匿名函数在哪里与命名函数形成对比.匿名函数在JS中非常广泛,因为命名函数表达式中的名称大多数都是无用的.