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

时间:2016-04-29 15:05:42

标签: javascript ecmascript-6 ecmascript-5

我正在使用一些框架&甚至为了我自己的目的写了一些图书馆。我现在正致力于AngularJs路由器的实现......再次看看DI的角度:

  1. [...字符串,功能]
  2. function。$注入
  3. 很久以来我一直在使用第一种语法。现在在测试我的路由器时,我想看看两种语法和如何处理它的行为不同,但是......

    第一手

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

    我面对时看到我的脸:

      

    ReferenceError:未定义SampleController

    另一只手

    我认为这是不洁净的:

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

    最后

    我知道它不起作用。 为什么? - 这是我的问题。

    为什么?

    我们接受过moduleclassmethod / functions,某些for循环,if ... {{ 1}}创建新范围。

    我从未读过类似的内容:

      

    函数的参数在各自的范围内进行评估

    请告诉我

    谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

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