Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载时未定义函数窗口_Javascript_Function - Fatal编程技术网

Javascript 加载时未定义函数窗口

Javascript 加载时未定义函数窗口,javascript,function,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&l

这个代码有什么问题

<!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>

测试
window.onload=函数()
{
函数addText()
{
var el=document.createElement('p');
el.innerHTML='这是测试';
document.getElementById('b').appendChild(el);
}
}

单击锚定时未定义我获取addText。当我将addText函数放在windowl.onload匿名函数之外时,它会工作

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


我不直接了解JS,但在Clojure等函数式语言中,您可以为函数指定一个名称供其自行引用,但如果您不将其绑定到名称,则它仍然是一个匿名函数。当您将自引用名称放在函数外部时,它也是函数的绑定名称。

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

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

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


我看不出定义该函数的任何理由,所以请去掉它的onload包装。

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

window.addText = function() { ...

是的,如果你把它从onload中取出,它会工作,在你的例子中,addText只在onload中可见