我是Java语言的初学者,经过一些编码实践,现在我开始使用闭包。我编写了一个简单的代码,在其中单击显示大小的链接时,文档正文的字体大小必须分别增加。但是我不明白我要去哪里错了。
<!DOCTYPE html>
<html>
<head>
<style>
body {
font-family: 'Times New Roman', Times, serif;
font-size: 10px;
background-color: bisque;
color:black;
}
</style>
</head>
<body>
<p>HELLO!! I AM CHANGING MY SIZES.</p>
<a href="#" id="size-12" onclick="changeSize(12)">Size 12</a>
<a href="#" id="size-14" onclick="changeSize(14)">Size 14</a>
<a href="#" id="size-16" onclick="changeSize(16)">Size 16</a>
<script>
function changeSize(size) {
return function () {
document.body.style.fontSize = size + 'px';
}
};
</script>
</body>
<html>
答案 0 :(得分:1)
因此,从现在开始,您将返回一个尚未调用的函数,以调用该函数,将每个onclick更改为:
onclick="changeSize(12)()"
这使得changeSize(12)返回内部函数,然后使用第二个括号调用内部函数:)
编辑:就像其他人所说的,这里实际上不需要返回内部函数,并且如果函数changeSize()的内容是类似
function changeSize(size) {
document.body.style.fontSize = size + 'px';
}
这将更加简洁
答案 1 :(得分:0)
使用从闭包生成的函数的原因之一是创建一个函数,该函数用一组特定的参数“冻结”更通用的函数。虽然确实可以通过在末尾添加一个附加的()
来更改处理程序属性来“解决”问题,但是如果最终要这样做,那么使用函数创建器函数就没有意义了。
相反,您可以创建一组预先创建的函数,以从HTML使用:
<script>
function changeSize(size) {
return function () {
document.body.style.fontSize = size + 'px';
}
};
var size12 = changeSize(12);
var size14 = changeSize(14);
var size16 = changeSize(16);
</script>
现在,您的HTML可以使用这些准备好的功能了:
<a href="#" id="size-12" onclick="size12()">Size 12</a>
<a href="#" id="size-14" onclick="size14()">Size 14</a>
<a href="#" id="size-16" onclick="size16()">Size 16</a>