先看下下面这段代码,如果你明白问题会是下面的输出才能够回答出来我的问题。因为我的问题就是为什么下面的代码会有这样的输出>_<。另外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函数
alert(f===foo); //true
function foo2() {
alert("foo2");
}
}window.onload = function() {
f();
foo(); //foo is not defined
foo2(); //foo2 is not defined
}
JavaScript函数
解决方案 »
- 请问能否让prototype的方法访问constructor的参数?
- 大家帮忙解决javascript表格控件选择问题
- 救命啊!选择radio的时候怎么响应不同的东西
- 请教一个倒计时问题?
- 请教一个简单的问题,在线给分!
- 急!!一个关于js弹出层中无法使用js的事宜,并且层中有图片有地址,却不显示的问题?
- 使用jQuery入门中,各种不明白的问题,这又是一个不知道为什么的问题。。大家请进。。
- web页面中导入的js文件的加载顺序
- MSN的相册效果是怎么实现的?
- javascript怎么判断文本匡里每次输的值都不同
- JS类的prototype指向到新对象后,其原型为新对象么?求教
- 请问JavaScript能产生键盘行为吗?比如按住按钮相当于某个键盘按键被按下
alert(foo); //true
function foo2() {
alert("foo2");
}
}
foo(); //ie 下是可以调用成功的哦,而火狐浏览器不行,因为作用域不同啊,火狐浏览器认为 foo 的作用域只在函数内部,ie 觉得,foo 是全局变量啊
f(); //可以,因为 f 无论 ie 还是火狐,都觉得它是全局变量啊
foo2(); //不可以啊,因为 foo2 的作用域在 function foo()内啊,js变量作用域查找原则是就近查找,找不到向外查,不会向内部函数查的啊
不能调用,是因为根据规范
以foo作为函数名字的函数表达式。即这个名字只在新定义的函数的作用域中有效——规范要求标识符不能在外围的作用域中有效。---来源于#1的链接。
foo2(); //foo2 is not defined
because请看#2的解答。
在IE中确实还是能够调用,因为在IE中foo和f是不同的引用,IE都把他们当做全局变量。在firefox和chrome中,他们是同一个引用,但作用域会不同,f是全局作用域,foo只在该函数内部有效。为什么,那是因为规范就是这么定的,只是IE没按规范实现而已。