命名的函数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式。