命名的函数expression式具有匹配的variables名称

我想知道JavaScript中的命名函数expression式,特别是节点。

有什么理由避免以下?

var foo = function foo () {}; 

我真的很喜欢使用函数expression式的代码组织,但我真的很喜欢函数声明的堆栈跟踪。 据我可以告诉上述代码的作品,但它看起来不正确。

谁能提供任何见解?

ABE:我正在寻找一个你正在命名一个函数的实例,就像你指定的variables一样。

函数声明带有附加的行李,你必须在使用之前定义内部函数,以避免jslint警告,因此你的代码往往会读到最后一个,我不是一个粉丝。

为了解决这个问题,你可以使用函数expression式,在顶部定义你的variables,然后按照它的运行顺序或多或less地排列你的代码。 然而,走这条路线意味着你的function都是匿名的,除非你命名它们。 这使我们回到原来的问题。

我可以命名一个函数声明,这个函数声明和variables本身一样被分配给一个可变参数。

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

这是不同的:

 // 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" 

你可以使用任何这些。 当你写'Class'对象或类似的东西时,'Name'非常方便。

var foo = function() {};

function foo() {};

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

var foo = function foo () {};

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

function foo () {}

没有理由在函数声明中使用命名函数expression式。