我想知道javascript中的命名函数表达式,特别是节点。
有没有理由避免以下情况?
var foo = function foo () {};
我真的很喜欢使用函数表达式进行代码组织,但我真的很喜欢堆栈跟踪的函数声明。据我所知,上面的代码有效,但看起来不对。
任何人都可以提供任何见解吗?
ABE:我特意在寻找你命名函数的实例,就像你赋予它的变量一样。
函数声明带有额外的包袱,你必须在使用之前定义内部函数,以避免jslint警告,因此你的代码往往会读到最后一个我不喜欢的扇形。
要解决此问题,您可以使用函数表达式,在顶部定义变量,然后按照运行顺序或多或少地对代码进行排序。但是,走这条路线意味着你的功能都是匿名的,除非你给它们命名。这让我们回到原来的问题。
我可以命名一个与变量本身分配给varable的函数声明。
答案 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 () {}
没有理由在函数声明上使用命名函数表达式。