首页 > 解决方案 > 在哪里可以定义函数

问题描述

已编辑:该表达式function foo() {return 20;}, foo()原本是console.log) 的单个参数。

这个:

console.log((function foo() {return 20;}, foo()));

不起作用,我得到ReferenceError是因为foo尚未定义。

为什么?

标签: javascriptscope

解决方案


console.log(function foo() {return 20;}, foo());

在此代码中,您将命名( foo) 函数作为参数传递给console.log. 知道了?您从未声明过function foo,您只是将它作为参数传递。在 javascript 中,函数声明和函数表达式具有相同的语法,因此会造成混淆。

也就是说,传递一个命名(而不是匿名)函数几乎总是没用的。您的代码等效于:

console.log(function () {return 20;}, foo());

wherefunction () {return 20;}是一个匿名函数,而不是一个命名函数。匿名函数在 JS 中非常普遍,因为命名函数表达式中的名称大多是无用的。


推荐阅读