关于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变量
作用域查找原则是就近查找,找不到向外查,不会向内部函数查的啊