为什么函数声明具有name属性而变量不在Javascript中

时间:2014-09-22 03:21:18

标签: javascript

我意识到了

function hello(){}
document.write(typeof hello); // outputs function
document.write("<br/>");
document.write(hello.name); // outputs name

,而

var hello = function(){}
document.write(typeof hello); // outputs function
document.write("<br/>");
document.write(hello.name); // doesn't output anything

你能解释一下原因吗?似乎功能不一样。

2 个答案:

答案 0 :(得分:4)

在第二个示例中,变量hello指向匿名函数表达式

您也可以编写命名函数表达式

var foo = function bar() {};
console.log(foo.name); // "bar"

使用命名函数表达式非常适合在严格模式中递归,但在旧版本的IE 中,您将发现标识符泄漏到命名空间中。< / p>

答案 1 :(得分:1)

当您使用第二种形式时,请以这种方式声明:

 var hello = function hello() {}

您将能够获得名称属性。这似乎是多余的,但这是一个很好的习惯,我们在工作的地方强制执行。它使堆栈跟踪更容易遵循,任何值得盐的minination将删除实际名称,除非它被引用。名字不必匹配。