JavaScript如何处理名称以()
结尾的函数?例如,考虑以下代码:
var foo() = function () { }; // The empty function
var bar = function(foo) { var myVariable = foo(); };
对foo();
的含义似乎有两种可能的解释:
foo
。这会将myVariable
的返回值指定为foo
。foo()
视为首先定义的函数的名称。这会为myVariable
分配空函数。这甚至是合法代码吗?如果是,那么规则是什么?
答案 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);