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

Named function expressions with matching variable name

本文关键字:函数 表达式 变量名      更新时间:2023-09-26

我想知道javascript中的命名函数表达式,特别是node.

是否有理由避免以下内容?

var foo = function foo () {};

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

谁能提供一些见解?

ABE:我特别想找一个实例,你正在命名一个函数与你分配给它的变量相同。

函数声明带来了额外的负担,你必须在使用内部函数之前定义它们,以避免jslint警告,因此你的代码倾向于从最后读到第一个,这是我不喜欢的。

为了解决这个问题,你可以使用函数表达式,在顶部定义变量,然后按运行的顺序排列代码。然而,采用这种方法意味着您的函数都是匿名的,除非您为它们命名。这让我们回到了最初的问题。

我可以将一个函数声明命名为与变量本身相同的变量吗

命名函数表达式在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 Object或者类似的东西的时候,Name是很方便的。

var foo = function() {};

function foo() {};

两者都应该是可能的。把它们组合起来应该不会有任何问题。

var foo = function foo () {};

很傻,因为你可以做

function foo () {}

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