日期:2014-05-16  浏览次数:20383 次

关于js函数的引用的疑问
先看下下面这段代码,如果你明白问题会是下面的输出才能够回答出来我的问题。因为我的问题就是为什么下面的代码会有这样的输出>_<。另外f跟foo不是恒等吗,为什么可以通过f()调用函数,却不能通过foo()来调用呢?

var f = function foo() {
alert(f===foo);   //true
function foo2() {
alert("foo2");
}
}

window.onload = function() {
f();
        foo();  //foo is not defined 
        foo2(); //foo2 is not defined 
}
JavaScript 函数

------解决方案--------------------
或许这篇文章能够解答你的疑问:
命名函数表达式探秘

------解决方案--------------------
这是个作用域问题

var f = function foo() {
    alert(foo);   //true
    function foo2() {
        alert("foo2");
    }
}
foo(); //ie 下是可以调用成功的哦,而火狐浏览器不行,因为作用域不同啊,火狐浏览器认为 foo 的作用域只在函数内部,ie 觉得,foo 是全局变量啊
f(); //可以,因为 f 无论 ie 还是火狐,都觉得它是全局变量啊
foo2(); //不可以啊,因为 foo2 的作用域在 function foo()内啊,js变量作用域查找原则是就近查找,找不到向外查,不会向内部函数查的啊