任何人都可以解释为什么下面两个不相等?我基本上试图弄清楚幕后发生了什么。我的理解是,他们都提到相同的功能,但似乎并非如此。函数参考 - 请指教!
var foo = function bar() {}
typeof foo //"function"
typeof bar //"function"
foo === bar //false
foo == bar //false
任何人都可以解释为什么下面两个不相等?我基本上试图弄清楚幕后发生了什么。我的理解是,他们都提到相同的功能,但似乎并非如此。函数参考 - 请指教!
var foo = function bar() {}
typeof foo //"function"
typeof bar //"function"
foo === bar //false
foo == bar //false
我不知道你,但我的浏览器为typeof bar
typeof bar //"undefined"
演示http://jsfiddle.net/gaby/t8Czr/
的bar
参考方法仅仅是方法本身内部提供返回undefined
..
你说得对。我正在阅读一篇文章并在Firebug控制台中进行测试,并认为我得到了我目睹的结果。不幸的是,我执行的确切代码不再存在。 – 2011-06-14 17:01:43
Bar i没有定义。酒吧只存在于foo的范围内。
如果您先声明酒吧,然后设置foo等于酒吧,您的结果将如预期。
由于赋值为foo
,这是一个命名函数表达式。在一个命名的函数表达式中,函数的名称仅在函数本身的封闭范围内可用,但不在外部。
外面它将简单地是未定义的。
var foo = function bar() { typeof bar; /* function */ };
bar; // undefined
只好分配给foo
没有去过那里,这将是一个函数声明和标识符bar
想在整个封闭的范围已面市,被宣布为功能,甚至之前。
typeof bar; // function
function bar() {}
这是一个good article理解命名函数表达式的工作,他们从函数声明的区别。
你是否按照我们看到的顺序执行它? – 2011-06-14 16:04:01
只是FYI,如果你想让它们引用相同的函数,你需要'var foo = function(){},bar = foo;'或'bar(){}; var foo = bar'。那么如果你比较它们,它们将是平等的。 – brymck 2011-06-14 16:19:50
您必须使用IE8或更低版本。这是一个已知的错误,不仅“bar”泄漏到封闭变量作用域中,而且还创建了一个唯一的函数对象并将其分配给“bar”。这就是为什么'bar'是一个函数,但'foo'不等于'bar'。 – user113716 2011-06-14 16:43:09