函数未定义加载窗口

时间:2012-06-20 14:42:38

标签: javascript function

此代码有什么问题

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>test</title>
        <script type="text/javascript" charset="utf-8">

            window.onload = function()
            {
                function addText() 
                {
                        var el = document.createElement('p');
                        el.innerHTML = 'This is test';
                        document.getElementById('b').appendChild(el);
                }

            }
        </script>
    </head>
    <body id="b">
        <a href="#" onclick="addText();">c</a>
    </body>
</html>

当我点击锚点时,我没有定义addText。当我在windowl.onload匿名函数之外放置addText函数时,它可以工作

4 个答案:

答案 0 :(得分:0)

我认为您正在创建的函数是window.onload上的匿名函数的闭包,因此主要作用域看不到它。

我不直接了解JS,但是在像Clojure这样的函数式语言中,你可以为一个函数赋一个名字供自己引用,但是如果不将它绑定到一个名字,它仍然是一个非常有用的函数。当您将函数放在函数外部时,自引用名称也是函数的绑定名称。

答案 1 :(得分:0)

您正在另一个函数中定义一个函数,然后尝试调用该内部函数。

从window.onload函数中删除addText()的声明。

答案 2 :(得分:0)

如果在另一个函数(Y)中定义一个函数(X)(使用函数声明),那么X的作用域将为Y,并且不能在它外部访问(除非将其复制到全局变量)。

我看不出定义该函数onload的任何理由,所以只需删除它的onload包装。

答案 3 :(得分:0)

addText仅在创建它的范围内可见。将其转换为您分配给window.addText的匿名函数,它将按预期工作:

window.addText = function() { ...