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中可见