什么是JS 中闭包的主要目的.它只用于公共和私人变量吗?还是有其他我错过的东西.我试图了解关闭,并且真的想知道使用它的主要优点是什么.
如果withJavascript中的语句创建了一个新范围,那么不应该点击链接显示x不同范围内的不同内容吗?它没有.
<a href="#" id="link1">ha link 1</a>
<a href="#" id="link2">ha link 2</a>
<a href="#" id="link3">ha link 3</a>
<a href="#" id="link4">ha link 4</a>
<a href="#" id="link5">ha link 5</a>
<script type="text/javascript">
for (i = 1; i <= 5; i++) {
with({foo:"bar"}) {
var x = i;
document.getElementById('link' + i).onclick = function() { alert(x); return false; }
}
}
</script>
Run Code Online (Sandbox Code Playgroud) 我正在使用具有以下参数化的函数(无法更改):
my_function(data, callback_function(results, status) {});
Run Code Online (Sandbox Code Playgroud)
我需要将其他信息传递给callback_function,这些信息无法添加到'data'(callback_function使用)或'results'或'status'.具体来说,此信息是my_function调用所在的for循环的计数器.
为此,我在callback_function体内包含对计数器的引用:
for(var i = 0; i < 10; i++) {
var data = 'cannot modify this data';
my_function(data, function (results, status) { alert(i); });
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,i的最终值(在这种情况下为9)被打印10次.预期的行为是针对要打印的循环(0到9)中的每个i值.
动态函数是否有可能访问其范围之外的变量,但是在它们被定义的范围内?
我正在尝试传递元素索引并使用延迟滑动每个列表项内容
这是我的代码
for(var i = 1; i <= $("#colContainer li").length ; i++) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
var delay = function() {
slide(el);
};
setTimeout(delay, 10);
function slide(el){
el.slideUp();
};
};
Run Code Online (Sandbox Code Playgroud)
但每次只是最后一个滑起来
我期望他们从索引1滑到延迟结束
我也尝试过这个
index = $(this).parent("li").index();
for(var i = 1; i <= $("#colContainer li").length ; i++) {
(function(i) {
var el = $("#colContainer li:nth-child(" + i + ") .colContent");
var delay = function() {
slide(el);
};
setTimeout(delay, 10);
function slide(el){
el.slideUp();
};
})(i); …Run Code Online (Sandbox Code Playgroud)