以()结尾的函数名

Ran*_*lue 2 javascript

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

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

var bar = function(foo) { var myVariable = foo(); };
Run Code Online (Sandbox Code Playgroud)

似乎有两种可能的解释foo();:

  1. 执行参数foo.这将指定myVariable返回的值foo.
  2. 考虑foo()作为首先定义的函数的名称.这将指定myVariable空函数.

这甚至是合法代码吗?如果是这样,那么规则是什么?

Dar*_*rov 5

这甚至是合法代码吗?

没有:

var foo() = function () { }; 
Run Code Online (Sandbox Code Playgroud)

应该:

var foo = function () { }; 
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么规则是什么?

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

因此,例如,以下代码的结果将123在此实时演示中看到:

var foo = function () { alert('we are in the foo function'); };
var bar = function(foo) { var myVariable = foo(); alert(myVariable); };
bar(function() { return 123; });
Run Code Online (Sandbox Code Playgroud)