当以某种方式声明时,外部文件中的Javascript函数是未定义的

Oba*_*bay 1 javascript jquery

从同一个js文件中调用时,myfunc()成功运行.但是从HTML页面调用时它是未定义的(Firebug):

JS档案:

$(function() {
    myfunc() {
        alert('inside myfunc');
    }
    alert('outside myfunc');
    myfunc(); //this successfully runs myfunc()
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<script>
$(function() {
    myfunc(); //this doesn't run myfunc(). It's undefined
});
</script>
Run Code Online (Sandbox Code Playgroud)

但是当我将myfunc()声明更改为:

myfunc = function () { ... }
Run Code Online (Sandbox Code Playgroud)

它不再是未定义的,并且运行成功.

对不起这个非常棒的问题,但刚刚发生了什么?当我改变声明函数的方式时,为什么它可以工作?

Mar*_*ger 9

这是一个范围问题.

$(function() {
    myfunc() {
        alert('inside myfunc');
    }
    alert('outside myfunc');
    myfunc(); //this successfully runs myfunc()
});
Run Code Online (Sandbox Code Playgroud)

它只能在匿名函数(function() { })中使用,所以如果你在匿名函数之外但在同一个js文件中调用它,它也将不可用.

如果你宣布使用它

myfunc = function () { ... }
Run Code Online (Sandbox Code Playgroud)

myfunc是一个全局变量,该函数随处可用.