myfunc()成功运行。但是从HTML页面调用时它是未定义的(Firebug):
JS档案:
$(function() {
myfunc() {
alert('inside myfunc');
}
alert('outside myfunc');
myfunc(); //this successfully runs myfunc()
});
HTML:
<script>
$(function() {
myfunc(); //this doesn't run myfunc(). It's undefined
});
</script>
但是当我将myfunc()声明更改为:
时myfunc = function () { ... }
它不再是未定义的,并且成功运行。
对不起这个非常棒的问题,但刚刚发生了什么?当我改变声明函数的方式时,为什么它可以工作?
答案 0 :(得分:9)
这是一个范围问题。
在
$(function() {
myfunc() {
alert('inside myfunc');
}
alert('outside myfunc');
myfunc(); //this successfully runs myfunc()
});
它仅在匿名函数(function() { }
)中可用,因此如果您在匿名函数之外但在同一个js文件中调用它,它也将不可用。
如果您使用
声明它myfunc = function () { ... }
myfunc是一个全局变量,该函数随处可用。
答案 1 :(得分:3)
在第一个代码段中,myfunc
仅存在于您定义的匿名函数的范围中。在第二个代码段中,myfunc
不在任何可见范围内。最后,在顶级定义myfunc
的第三个代码段中,它在全局范围内可用,因此您的javascript的任何其他部分都可以成功调用它。
如果您发现自己仍然无法理解Javascript中的变量范围,您可能需要尝试阅读the results for "javascript scope" on Google中的一些内容以获得更全面的解释。