此代码有什么问题
<!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函数时,它可以工作
答案 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() { ...