作者:小杰01234 | 来源:互联网 | 2022-11-24 18:31
编辑:表达式function foo() {return 20;}, foo()
意味着是一个单一的参数console.log
).
这个:
console.log((function foo() {return 20;}, foo()));
不行,我得到ReferenceError
因为foo
没有定义.
为什么?
1> Nurbol Alpys..:
console.log(function foo() {return 20;}, foo());
在此代码中,您将一个named(foo
)函数作为参数传递给console.log
.得到它了?你从来没有声明过函数foo
,你只是将它作为一个参数传递.在Javascript中,函数声明和函数表达式具有相同的语法,因此存在混淆.
也就是说,传递命名(而不是匿名)函数几乎总是无用的.您的代码等同于:
console.log(function () {return 20;}, foo());
function () {return 20;}
匿名函数在哪里与命名函数形成对比.匿名函数在JS中非常广泛,因为命名函数表达式中的名称大多数都是无用的.
*"你永远不会宣布函数foo,你只是把它作为一个参数传递."* - 说得好