JavaScript函数的类型是在声明函数之前定义的

Typeof of a javascript function is defined before the function is declared?

本文关键字:函数 定义 声明 类型 JavaScript      更新时间:2023-09-26

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

<script type=" type="text/javascript">
    if(typeof window.myfunc == "function"){
        alert("Why does myfunc already exist ?");
    }
    function myfunc(){
    }
</script>

是否会在 myfunc 函数尚未定义时弹出警报?

我想我在Chrome,Safari和IE(不是FF)中发现了与此行为相关的问题。当包含函数的 js 文件多次包含在网页中时,它使我无法扩展函数的原型。在称其为错误并报告之前,我想了解更多信息。

谢谢!

命名函数声明(包括函数体)被提升到JavaScript 中的顶级范围。我建议阅读这篇关于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 Garden 的一句话:

"上述功能在程序开始执行之前被吊起;因此,它在定义范围内的任何地方都可用,即使在源代码中的实际定义之前调用也是如此

更多信息在这里: http://bonsaiden.github.com/JavaScript-Garden/#function.general