为什么在$ .get()回调闭包中捕获的全局变量总是保持相同的值?

时间:2009-12-24 04:39:15

标签: javascript jquery scope global-variables

我在$.get()回调中捕获全局变量的值时遇到了一些麻烦:

相关标记

<div class="block" id="blog"></div>
<div class="block" id="music"></div>
<div class="block" id="video"></div>

相关代码

$('div.block').each(function() {

 $this_id = $(this).attr('id');

 alert($this_id); // outputs: blog, music, video

 $.get('test.php', {id: $this_id}, function(data) {

  alert($this_id); // outputs: blog, blog, blog (WHY?)

  $('div#' + $this_id).html(data);

 });
});

我正在尝试获取HTML内容并将其插入到每个 div中,但 $ this_id 在调用{{1}内部时不会被更改}}。任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:0)

您必须在函数范围内定义 $ this_id ,否则它将默认为全局变量。只需改变一下:

$this_id = $(this).attr('id');

到此:

var $this_id = $(this).attr('id');

养成明确宣布所有变量的习惯是个好主意......以这种方式更容易跟踪它们。