Javascript 以()结尾的函数名

Javascript 以()结尾的函数名,javascript,Javascript,JavaScript如何处理名称以()结尾的函数?例如,考虑下面的代码: var foo() = function () { }; // The empty function var bar = function(foo) { var myVariable = foo(); }; 对于foo(),似乎有两种可能的解释表示: 执行参数foo。这将为myVariable分配foo的返回值 将foo()作为最初定义的函数名。这将分配myVariable空函数 这是法律法规吗?如果是,规则是什么?名

JavaScript如何处理名称以
()
结尾的函数?例如,考虑下面的代码:

var foo() = function () { }; // The empty function

var bar = function(foo) { var myVariable = foo(); };
对于
foo(),似乎有两种可能的解释表示:

  • 执行参数
    foo
    。这将为
    myVariable
    分配
    foo
    的返回值
  • foo()
    作为最初定义的函数名。这将分配
    myVariable
    空函数

  • 这是法律法规吗?如果是,规则是什么?

    名称中不包含
    ()
    。您可能会遇到语法错误。您可以找到一些命名规则。

    在javascript中,括号表示执行。因此,代码将失败,因为它将在第一行查找函数foo。

    标识符可能不包含任何括号,因此第一条语句是非法的。但是,第二种方法很好,
    myVariable=foo()
    执行
    foo
    参数并指定返回值

    这是法律法规吗

    否:

    应该是:

    var foo = function () { }; 
    
    如果是,规则是什么

    在这种情况下,
    foo
    参数将具有优先权,因为它是在内部作用域中定义的,而不是在
    foo
    函数中定义的。所以这实际上是一个范围问题:变量定义在哪里。解释器首先查看代码的最内部范围,然后查看外部范围。。。直到它到达全局范围(窗口对象)

    例如,以下代码的结果将是
    123
    ,如图所示:

    你真的是说“我可以传递函数作为引用吗?”如果是,那么答案是肯定的:

    var foo = function() { return 2; }
    var bar = function(fn){ return fn(); }
    
    var two = bar(foo);
    

    尝试使用chrome的javascript控制台或firebug
    var foo = function () { alert('we are in the foo function'); };
    var bar = function(foo) { var myVariable = foo(); alert(myVariable); };
    bar(function() { return 123; });
    
    var foo = function() { return 2; }
    var bar = function(fn){ return fn(); }
    
    var two = bar(foo);