哪里可以定义函数

the*_*sti 4 javascript scope

编辑:表达式function foo() {return 20;}, foo()意味着是一个单一的参数console.log).

这个:

console.log((function foo() {return 20;}, foo()));
Run Code Online (Sandbox Code Playgroud)

不行,我得到ReferenceError因为foo没有定义.

为什么?

Nur*_*yev 9

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中非常广泛,因为命名函数表达式中的名称大多数都是无用的.

  • *"你永远不会宣布函数foo,你只是把它作为一个参数传递."* - 说得好 (3认同)