2011-11-30 92 views
2

我想知道javascript中的命名函数表达式,特别是节点。具有匹配变量名称的命名函数表达式

是否有任何理由避免以下情况?

var foo = function foo() {}; 

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

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

ABE:我正在寻找你指定的函数与你指定的变量相同的实例。

函数声明带有额外的行李,您必须在使用之前定义内部函数,以避免jslint警告,因此您的代码倾向于读取最后一个,我不是一个粉丝。

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

我可以将一个函数声明命名为与变量本身相同的赋值给一个可变参数。

回答

0

var foo = function() {};

function foo() {};

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

3

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

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" 

你可以使用任何一种。 当你写'Class'对象或类似的东西时,'Name'很方便。

-1

var foo = function foo() {};

是愚蠢的,因为你可以做

function foo() {}

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

相关问题