0

有人可以解释或链接到可以告诉我原因的资源:

<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 文件在网页中多次包含时,它使我无法扩展函数的原型。在将其称为错误并报告它之前,我想了解更多信息。

谢谢 !

4

2 回答 2

2

命名函数声明,包括函数体,在 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() { ... }
于 2012-06-22T15:20:37.777 回答
1

一个词:吊装

来自 JavaScript Garden 的引述:

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

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

于 2012-06-22T15:17:12.117 回答