在阅读JavaScript中的闭包后,我仍然无法理解它们在哪里使用?如果没有闭包那么事情将如何交替进行(如果可能的话)以及闭包的使用简化了什么。如果有人可以用JavaScript中的一些代码示例解释这一点,那将会有所帮助。任何解释这一点的文章的链接也是受欢迎的。 我已阅读this中提到的similar question文章。它用这样的代码解释
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
但是为什么我会这样做呢,而我可以轻松地创建像这样的函数
function sizer(size) {
document.body.style.fontSize = size + 'px';
};
document.getElementById('size-12').onclick = function(){sizer(12)};
document.getElementById('size-14').onclick = function(){sizer(14)};
document.getElementById('size-16').onclick = function(){sizer(16)};
答案 0 :(得分:0)
在您的示例中,使makeSizer()
返回一个函数意味着更少的代码。
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
document.getElementById('size-12').onclick = makeSizer(12);
document.getElementById('size-14').onclick = makeSizer(14);
document.getElementById('size-16').onclick = makeSizer(16);
VS
function sizer(size) {
document.body.style.fontSize = size + 'px';
};
document.getElementById('size-12').onclick = function(){sizer(12)};
document.getElementById('size-14').onclick = function(){sizer(14)};
document.getElementById('size-16').onclick = function(){sizer(16)};
答案 1 :(得分:0)
您可以使用闭包执行多项操作。关于你的问题:闭包用于设置部分功能。当curry进入场景时,该技术用于函数编程。 Currying意味着在每个参数传递并返回结果后调用函数。通常是部分函数,但是当所有参数都被传递时,它将返回最终值。你通过明确地返回一个新函数假装做的那种技术。
为什么有用?那么,它是一种函数式编程技术,可以与对象或类型编程中的部分类进行比较。
有些情况下这个概念很有用。请阅读software-innovators.nl上的博客,了解内容示例。
请记住,这是需要关闭的更多示例之一。
答案 2 :(得分:0)