JavaScript的;如何声明变量全局?

时间:2011-02-09 18:29:45

标签: javascript jquery declaration

http://jsfiddle.net/borayeris/6kvyb/

<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

<script>
$('li').each(function(index) {
    var qq=$(this).text();
    alert(index + ': ' + qq);
  });


alert(qq);// Asking this one.
</script>

3 个答案:

答案 0 :(得分:15)

你已经在函数范围内声明了qq。一旦该函数退出,qq就不再存在。

如果你想获得qq的警报,你需要在函数之外声明它。请记住,它只包含分配给它的最后一个值。

var qq;

$('li').each(function(index) {
    qq=$(this).text();
    alert(index + ': ' + qq);
  });

alert(qq); // Will alert 'bar'

答案 1 :(得分:3)

布兰登的答案在解释原因时是正确的。相反,如果您想知道在调用each()之后如何使其可访问,您可能需要这样的内容:

var qq;

$('li').each(function(index) {
    qq = $(this).text();

    alert(index + ': ' + qq);
  });


alert(qq);

这使得qq成为全局范围变量,您可以为每次循环中的值重新分配值。在循环结束时,变量将保留分配给它的最后一个值(在您的示例中为bar)。

答案 2 :(得分:0)

应该像这样重写:

<script>
var qq;
$('li').each(function(index) {
qq=$(this).text();
alert(index + ': ' + qq);
});
alert(qq);

请注意,qq将只包含自每次循环播放li时重新分配的最后一个值。

它没有用,因为你在一个匿名函数中声明了qq变量,所以它不存在于它之外。