注册 登录
编程论坛 JavaScript论坛

一个很奇怪的条件函数 哪位大侠帮忙指点一下。

sgnsir 发布于 2011-02-18 13:47, 964 次点击
应该是条件满足该函数才会被定义和调用 ,但下面的代码条件为假函数却一然是被调用 这是怎么回事啊!?请帮忙指点指点啊

<script type="text/javascript">
var num=1;
if(num==0){
function myfunc(arg){
return "嗨 "+arg;
}
}
document.write(myfunc("Javascript 函数"));
</script>
6 回复
#2
编程之星2011-02-18 14:35
你这段代码在IE下运行正常.在Firefox下去报错“myfunc is not defined”.
这是因为IE和Firefox对JS的解释差异
#3
sgnsir2011-02-18 15:09
回复 2楼 编程之星
我没有问IE和火狐的解释差别- -!
只是不明白为什么在if语句为假的情况下还能够调用myfunc函数 ?
#4
gupiao1752011-02-18 16:13
IE是函数不管在什么情况下,它都是先解释函数,也就是预定义函数:
function myfunc(arg){
return "嗨 "+arg;
}
不管你给它做什么约束,它都已经被定义了。你可以换个条件约束下试试,效果是一样的。FF则不同,这跟JS底层定义,也就是浏览器的定义有关系,他们对JS定义作用域有区别导致的。

大道理我也说不来。想了解更多就看ECMA-262标准!
#5
sgnsir2011-02-18 19:15
回复 4楼 gupiao175
嗯,这样解释就不难理解函数为什么能执行了。谢谢 呵呵
#6
argont2011-04-10 12:05
应该只在firefox中有报错。
因为firefox中,变量的作用域可以是块级别的。

if(num==0){
    function myfunc(arg) { return "嗨 "+arg; }
}

中的 myfunc 只在if内有效,跳出了if则未定义了。


[ 本帖最后由 argont 于 2011-4-10 12:07 编辑 ]
#7
wjggd2011-05-31 23:54
document.write(myfunc("Javascript 函数"));
这句话是放在if外的,不论你的if语句是否正确,它都会执行,你要把这语句放在if里面   如下:
<script type="text/javascript">
var num=1;
if(num==0){
function myfunc(arg){
return "嗨 "+arg;
}
document.write(myfunc("Javascript 函数"));
}
</script>
1