功能参考 - 请指教!

时间:2011-06-14 15:58:15

标签: javascript

有谁可以解释为什么下面两个不相等?我基本上试图找出幕后发生的事情。我的理解是他们都指的是相同的功能,但似乎并非如此。

var foo = function bar() {}

typeof foo //"function"
typeof bar //"function"

foo === bar //false
foo == bar //false

3 个答案:

答案 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,用于理解命名函数表达式的工作方式以及它们与函数声明的区别。