JavaScript闭包的使用
在阅读了JavaScript中的闭包之后,我仍然无法理解它们在哪里使用?如果没有闭包,那么事情将如何交替进行(如果可能的话),闭包的使用会简化什么。如果有人能用JavaScript中的一些代码示例来解释这一点,那将很有帮助。欢迎链接到解释这一点的文章。 我读过一篇文章中提到的。它用这样的代码解释JavaScript闭包的使用,javascript,closures,Javascript,Closures,在阅读了JavaScript中的闭包之后,我仍然无法理解它们在哪里使用?如果没有闭包,那么事情将如何交替进行(如果可能的话),闭包的使用会简化什么。如果有人能用JavaScript中的一些代码示例来解释这一点,那将很有帮助。欢迎链接到解释这一点的文章。 我读过一篇文章中提到的。它用这样的代码解释 function makeSizer(size) { return function() { document.body.style.fontSize = size
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)};
但是,当我可以轻松创建这样的函数时,为什么要这样做呢
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)};
在您的示例中,使
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
您可以使用闭包执行多种操作。关于您的问题:闭包用于设置一个部分函数。当Curry出现在场景中时,此技术用于函数编程。curry表示在每个参数传递并返回结果后调用函数。主要是部分函数,但当传递所有参数时,它将返回最终值。这正是你假装通过显式返回一个新函数来实现的技术 为什么它有用?这是一种函数式编程技术,可以与面向对象编程中的分部类相比较 在某些情况下,这个概念是有用的。请阅读我在上的博客,了解部门内的示例 请记住,这是需要闭包的更多示例之一 我认为这个答案相当详细地解释了这个概念。 阅读本文后,我的理解是闭包是用来将函数作为第一类对象的。作为第一类对象的函数非常有用,因为它们可以像参数一样传递,并使某些事情变得非常简单
另外,使用闭包的另一个好处可能是,它们可以用于在JavaScript中使成员私有,如本文所述 到处都用。这就是语言的运作方式。没有特定的用例。@Neerav:不要介意所有这些onclick在技术上也是闭包事实是,如果函数不能被随意调用和传递,JS几乎不值得使用。我们又回到了糟糕的过去,传递一系列JS代码来解析和运行,或者类似的东西。这不是一个需要闭包的好例子。