我意识到了
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
你能解释一下原因吗?似乎功能不一样。
答案 0 :(得分:4)
在第二个示例中,变量hello
指向匿名函数表达式。
您也可以编写命名函数表达式
var foo = function bar() {};
console.log(foo.name); // "bar"
使用命名函数表达式非常适合在严格模式中递归,但在旧版本的IE 中,您将发现标识符泄漏到命名空间中。< / p>
答案 1 :(得分:1)
当您使用第二种形式时,请以这种方式声明:
var hello = function hello() {}
您将能够获得名称属性。这似乎是多余的,但这是一个很好的习惯,我们在工作的地方强制执行。它使堆栈跟踪更容易遵循,任何值得盐的minination将删除实际名称,除非它被引用。名字不必匹配。