具有匹配变量名称的命名函数表达式

时间:2011-11-30 21:50:57

标签: javascript node.js

我想知道javascript中的命名函数表达式,特别是节点。

有没有理由避免以下情况?

var foo = function foo () {};

我真的很喜欢使用函数表达式进行代码组织,但我真的很喜欢堆栈跟踪的函数声明。据我所知,上面的代码有效,但看起来不对。

任何人都可以提供任何见解吗?

ABE:我特意在寻找你命名函数的实例,就像你赋予它的变量一样。

函数声明带有额外的包袱,你必须在使用之前定义内部函数,以避免jslint警告,因此你的代码往往会读到最后一个我不喜欢的扇形。

要解决此问题,您可以使用函数表达式,在顶部定义变量,然后按照运行顺序或多或少地对代码进行排序。但是,走这条路线意味着你的功能都是匿名的,除非你给它们命名。这让我们回到原来的问题。

我可以命名一个与变量本身分配给varable的函数声明。

4 个答案:

答案 0 :(得分:3)

命名函数表达式在v8(因此节点)中工作,没问题。只是在IE的旧版本中,存在问题。

答案 1 :(得分:1)

这就是区别:

// anonymous function expression
var x = function(){};
console.log(x.name);   // "" -> empty string

// named function expression
var x = function foo(){};
console.log(x.name);   // "foo"

// function statement (old thing with function 'hoisting' behavior) 
function foo(){};
console.log(foo.name); // "foo"

您可以使用其中任何一种。 当您编写“类”对象或类似对象时,“名称”很方便。

答案 2 :(得分:0)

var foo = function() {};

function foo() {};

两者都应该是可能的。结合它们不应该给你任何问题。

答案 3 :(得分:-1)

var foo = function foo () {};

是愚蠢的,因为你可以做到

function foo () {}

没有理由在函数声明上使用命名函数表达式。