作为参数传递的 javascript 命名函数的范围是什么

What's the scope of javascript named function, passed as parameter

我使用过一些框架,甚至为我自己的目的编写了一些库。我现在正在实施 AngularJs 路由器...并再次查看 angular:

的 DI
  1. [...字符串,函数]
  2. function.$注入

长期以来我一直在使用第一种语法。现在在测试我的路由器时,我想看看两种语法是否不同以及如何处理它的行为,但是...

第一手资料

module.controller(function SampleController()
{
});
// Since it's and `invokelater...` function which is called right away,
SampleController.$inject = [/** my component dependencies **/]

见我面时:

ReferenceError: SampleController is not defined

另一只手

我觉得这样写不干净:

function SampleController()
{
}
SampleController.$inject = [];
moddule.$inject = [];

所以终于

我知道这行不通。 为什么? - 这是我的问题。

为什么?

我们被教导 moduleclassmethod/functions、一些 for 循环、if... else 创建新范围。

我从来没有读过类似的东西:

function's parameters are evaluated in their own scope

请告诉我

谢谢!

命名函数表达式只在它们自己的范围内创建一个匹配的变量(这对于递归调用函数很有用)。

它们在包含它们的函数范围内不创建任何东西。

当您将它作为函数参数传递时,您传递给它的变量的作用域就是函数调用。即 function function_you_pass_the_function_to(someFunction) { }someFunction 变量限定为自身。