在声明函数之前定义javascript函数的Typeof?

在声明函数之前定义javascript函数的Typeof?,javascript,parsing,function,declaration,typeof,Javascript,Parsing,Function,Declaration,Typeof,请有人解释一下或链接到一个资源,告诉我为什么: <script type=" type="text/javascript"> if(typeof window.myfunc == "function"){ alert("Why does myfunc already exist ?"); } function myfunc(){ } </script> 一个字:吊装 摘自JavaScript Garden的一段话:

请有人解释一下或链接到一个资源,告诉我为什么:

<script type=" type="text/javascript">

    if(typeof window.myfunc == "function"){
        alert("Why does myfunc already exist ?");
    }

    function myfunc(){

    }
</script>
一个字:吊装

摘自JavaScript Garden的一段话:

上述函数在程序开始执行之前被挂起;因此,它在定义它的范围内的任何地方都可用,即使在源中的实际定义之前调用它也可以

更多信息请点击这里:

一个词:提升

摘自JavaScript Garden的一段话:

上述函数在程序开始执行之前被挂起;因此,它在定义它的范围内的任何地方都可用,即使在源中的实际定义之前调用它也可以


此处的更多信息:

命名函数声明,包括函数体,被提升到 JavaScript中的作用域顶部。我建议你读书

如果您这样做,那么您将函数分配给一个命名的 变量,只有变量声明将被提升,但它不会 实际发生赋值之前的值:

if (typeof myFunc == 'function') {
    // will not be reached
}

var myFunc = function() { ... }
上述情况实际上被视为:

var myFunc; // myFunc is undefined

if (typeof myFunc == 'function') {
    // will not be reached
}

myFunc = function() { ... }

命名函数声明(包括函数体)被提升到 JavaScript中的作用域顶部。我建议你读书

如果您这样做,那么您将函数分配给一个命名的 变量,只有变量声明将被提升,但它不会 实际发生赋值之前的值:

if (typeof myFunc == 'function') {
    // will not be reached
}

var myFunc = function() { ... }
上述情况实际上被视为:

var myFunc; // myFunc is undefined

if (typeof myFunc == 'function') {
    // will not be reached
}

myFunc = function() { ... }

当您将函数定义为
var myfunc=function(){}
时,您将看到差异。当您将函数定义为
var myfunc=function(){}
时,您将看到差异。感谢您的解释。我从来没有意识到这一点。谢谢你的解释,怀亚特。我从未意识到func=function(){}语法实际上起了作用。这解决了我的问题!因为我运行一个Web服务,当我的javascript文件包含两次时,我的函数也会被提升两次。问题是,在第二次提升函数之前使用该函数创建的对象(如obj=new myfunc())不会受到重新提升函数后对函数原型所做更改的影响。很难解释,但希望你能明白我的意思。无论如何,谢谢你的语法提示!谢谢你的解释,怀亚特。我从来没有意识到这一点。谢谢你的解释,怀亚特。我从未意识到func=function(){}语法实际上起了作用。这解决了我的问题!因为我运行一个Web服务,当我的javascript文件包含两次时,我的函数也会被提升两次。问题是,在第二次提升函数之前使用该函数创建的对象(如obj=new myfunc())不会受到重新提升函数后对函数原型所做更改的影响。很难解释,但希望你能明白我的意思。无论如何,谢谢你的语法提示!