以()结尾的函数名

时间:2011-09-04 21:49:23

标签: javascript

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

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

var bar = function(foo) { var myVariable = foo(); };

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

  1. 执行参数foo。这会将myVariable的返回值指定为foo
  2. foo()视为首先定义的函数的名称。这会为myVariable分配空函数。
  3. 这甚至是合法代码吗?如果是,那么规则是什么?

5 个答案:

答案 0 :(得分:5)

  

这甚至是合法代码吗?

没有

var foo() = function () { }; 

应该是:

var foo = function () { }; 
  

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

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

例如,以下代码的结果将为123,如live demo所示:

var foo = function () { alert('we are in the foo function'); };
var bar = function(foo) { var myVariable = foo(); alert(myVariable); };
bar(function() { return 123; });

答案 1 :(得分:2)

()不被视为名称的一部分。您可能会收到语法错误。您可以找到一些命名规则here

答案 2 :(得分:1)

在javascript中,括号表示执行。所以你的代码会失败,因为它会在第一行寻找函数foo。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你的意思是“我可以传递函数作为参考吗?”如果是这样,那么答案是肯定的:

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

var two = bar(foo);