虽然在控制台中未定义,但setInterval中的javascript变量在警告框中显示其值

时间:2012-02-09 08:04:41

标签: javascript jquery

javascript片段:

<script type="text/javascript">
$(document).ready(function() {

    setInterval(function() {
        $.getJSON('notif.php', function(data) {
            my_var = '123';
        });
        alert("my var =" + my_var);
    }, 2000);

});    
</script>

在chrome和FF控制台中,my_var显示为未定义,但其值显示在警告框中。如果未定义,那么它的val如何

解释是什么?

3 个答案:

答案 0 :(得分:2)

jquery中的getJSON默认为asynch调用,因此alert("my var =" + my_var);将在不等待ajax调用响应的情况下执行。

在回调函数中移动警报,如

setInterval(function() {
    $.getJSON('notif.php', function(data) {
        my_var = '123';
        alert("my var =" + my_var);
    });
}, 2000);

答案 1 :(得分:0)

可变范围是您正在寻找的主题。

变量my_var仅存在于ajax success调用的闭包范围内。

如果您要在更高级别定义my_var,请执行以下操作:

$(document).ready(function(){
var my_var;
...

你可以在你的控制台中看到它。

答案 2 :(得分:0)

Javascript变量声明:

var foo; //sets foo to undefined
console.log(foo) //-> undefined

foo = "bar" //sets foo's value to "bar"
console.log(foo) //-> "bar"

var foo = "bar"; //sets foo to undefined initially, then changes it's value to "bar"
console.log(foo) //-> "bar"

所以在你的情况下:

my_var的值始终为undefined,直到为其指定了不同的值。