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

虽然控制台中未定义,但setInterval中的javascript变量在警报框中显示其值,javascript,jquery,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)

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>

$(文档).ready(函数(){
setInterval(函数(){
$.getJSON('notif.php',函数(数据){
my_var='123';
});
警报(“my var=“+my_var”);
}, 2000);
});    
在chrome和FF控制台中,my_var显示为未定义,但其值显示在alertbox上。如果未定义,那么其val是如何定义的


解释是什么?

变量范围是您要寻找的主题

变量my_var只存在于ajaxsuccess调用的闭包范围内

如果您想在更高的级别上定义my_var,如下所示:

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

您可以在控制台中看到它。

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"
所以在您的情况下:

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"

myu-var
总是有一个
undefined
的值,直到它被分配了一个不同的值。

jquery中的getJSON默认是
asynch
调用,因此
警报(“myvar=“+myu-var”)将在不等待ajax调用响应的情况下执行

将警报移动到回调函数中,如下所示

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

不。。。这不是范围。没有“var”,它将是全球性的。它是关于异步任务的。我的变量只有在请求完成后才被定义。你是对的。如果ajax中有var my_var,那就是我的情况。。。