- testClosure正在调用一个命名函数,该函数接受两个参数并返回一个匿名函数,并将 t1 设置为匿名函数。
t1 现在是一个匿名函数,可以调用并接受一个参数。调用 t1 时,它会从名称函数和匿名函数构建您的字符串参数参数并返回结果。
每当您调用命名函数 testClosure 时,它都会创建一个闭包。当您调用匿名函数时,它可以访问包含的名称函数字符串参数,并将所有 3 个参数作为构建字符串返回。
JS 中的闭包是 JavaScript 提供的最强大的实现之一。学习如何以及在哪里实施或在哪里需要关闭是通过一段时间的婴儿步骤来学习的。
你的 JavaScript 库越大,你就会发现自己越需要闭包。
闭包允许您将特定的数据片段放在其他上下文无法访问的上下文中,而且我发现自己在循环内部使用它们的次数比其他任何地方都多。
大多数时候匿名函数和闭包一起工作。学习闭包的最好方法是每天坚持不懈地学习更多关于闭包的知识,当你发现自己处于需要闭包的情况时,你最终会得到它。
下面是一个示例,我正在对远程服务器上的相册进行 AJAX 调用。AJAX 调用的成功函数保存相册的一组照片。对于每个循环,我都会调用一个名称函数,该函数将返回一个匿名函数。匿名函数设置为按钮单击事件。
添加到 DOM 的每个新按钮都可以访问它自己的封闭 url 字符串参数。
学习和理解闭包对于成为一名优秀的 JavaScript 程序员至关重要。
function testClosure(url) {
return function (ev) {
document.getElementById('myImg').url = url || 'http://www.dummyurl/dummy.png';
}
}
$.ajax({
type: "post",
url: "http://www.myurl.com",
data: 'photoalbum' = 45,
dataType: "json",
success: function (photos) {
for (var i = 0; i < photos.length; i++) {
var btn = document.createElement('input');
btn.type = 'button';
btn.onclick = testClosure(photos[i].url);
document.body.appendChild(btn);
};
}
});