Eth*_*han 19 javascript jquery
我希望下面的代码警告"0"和"1",但它会两次警告"2".我不明白原因.不知道这是不是jQuery的问题.另外,如果这些帖子的标题和标签不准确,请帮我编辑标题和标签.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
for (var i=0; i<2; i++) {
$.get('http://www.google.com/', function() {
alert(i);
});
}
});
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 38
您将i
在所有回调中共享单个变量.
因为Javascript闭包通过引用捕获变量,所以回调将始终使用当前值i
.因此,当循环执行后jQuery调用回调时,i
将始终如此2
.
您需要i
将参数作为参数引用到单独的函数中.
例如:
function sendRequest(i) {
$.get('http://www.google.com/', function() {
alert(i);
});
}
for (var i = 0; i < 2; i++) {
sendRequest(i);
}
Run Code Online (Sandbox Code Playgroud)
这样,每个回调都将有一个带有单独i
参数的单独闭包.
Tom*_*lak 13
替代SLaks的回答
$(function() {
for (var i=0; i<2; i++) {
$.get('http://www.google.com/', function(i) {
return function() { alert(i); }
}(i));
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21638 次 |
最近记录: |