有谁可以解释为什么下面两个不相等?我基本上试图找出幕后发生的事情。我的理解是他们都指的是相同的功能,但似乎并非如此。
var foo = function bar() {}
typeof foo //"function"
typeof bar //"function"
foo === bar //false
foo == bar //false
答案 0 :(得分:5)
我不了解您,但我的浏览器会undefined
typeof bar
typeof bar //"undefined"
demo http://jsfiddle.net/gaby/t8Czr/
该方法的bar
引用仅在方法本身内可用。
答案 1 :(得分:2)
栏未定义。 Bar只存在于foo的范围内。
如果你先声明bar然后将foo设置为bar,那么你的结果将符合预期。
答案 2 :(得分:2)
这是一个命名函数表达式,因为赋值给foo
。在命名函数表达式中,函数的名称仅在函数本身的封闭范围内可用,但不在外部。
在外面它将是未定义的。
var foo = function bar() { typeof bar; /* function */ };
bar; // undefined
如果没有foo
的赋值,那么这将是一个函数声明,标识符bar
在整个封闭范围内都可用,甚至在声明函数之前。
typeof bar; // function
function bar() {}
这是一个good article,用于理解命名函数表达式的工作方式以及它们与函数声明的区别。