我的环境是Firefox6.0
其实第一,第三,第四段代码都好理解,关键解释下第2段
<script>
/*
func1();
var function func1(){
alert(1);
}
//正常弹出
*/func1();
var testfun=function func1(){
alert(1);
}
//不弹出,Firebug:func1() is not defined
/*
testfun();
var testfun=function func1(){
alert(1);
}
//Firebug:testfun() is not a function
*//*
testfun();
var testfun=function(){
alert(1);
}
//Firebug:testfun() is not a function
*/
</script>
其实第一,第三,第四段代码都好理解,关键解释下第2段
<script>
/*
func1();
var function func1(){
alert(1);
}
//正常弹出
*/func1();
var testfun=function func1(){
alert(1);
}
//不弹出,Firebug:func1() is not defined
/*
testfun();
var testfun=function func1(){
alert(1);
}
//Firebug:testfun() is not a function
*//*
testfun();
var testfun=function(){
alert(1);
}
//Firebug:testfun() is not a function
*/
</script>
解决方案 »
- 在线等,立结贴,JQuery中body的宽高度问题
- 请问safari浏览器 在windows和mac系统下运行有什么不同的地方吗?
- jquery: e.target.tagName is undefined
- 问一个event的问题
- 无JAVASCRIPT编程基础,直接学JQUERY可以吗?
- 怎样用javascript打开特大分辨率的IE窗口
- 一个小问题!
- (一个非常棘手的问题)控件的焦点问题:
- 有没有高手??? 请教如何应用JavaScript只更新网页的局部?
- amcharts 的x轴显示不全如何解决
- Extjs 跨panel拖动问题...求解决! ::>_<::
- 我想为文本域添加事件,无论是失去焦点,得到焦点,value改变了都会触发这个事件应该怎么做呢。
var b = a;
应该理解为a,b 是一样的
//var b=a;
b("afsadfsadf");
a("hell");
IE8 下是通过的
var testfun=function func1(){
alert(1);
}在IE和其他浏览器的解释不同:其他浏览器下,会把函数声明与函数表达式放一起的语句作为函数表达式处理,即代码中的
var testfun=function func1(){
alert(1);
}
会被当作函数表达式处理,因此无法被提前调用,但是注意,func1在函数内部是可见的,在外部是不可见的,你可以这样测试下:
var testfun=function func1(){
alert(1);
alert(func1);
}
testfun();
func1();上述代码在非IE下testfunc会先弹出1,再弹出函数代码,说明内部func1是可见的,但是全局调用func1会报错,说明func1在外部是不可见的。
好了,下面说IE下的情况,IE是把这种情况的代码都做处理,即相当于即用了函数声明,又用了函数表达式,代码被解释为:
function func1(){
alert(1);
}
var testfunc = func1;这样,func1在外部也是可见的,按照JS函数声明解析机制,func1因此可以在声明前调用。