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

Though undefined in console, javascript variable within setInterval shows its value on alert box

本文关键字:警告 变量 显示 javascript setInterval 控制台 未定义 中的      更新时间:2023-09-26

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显示为未定义,但其值显示在alertbox上。如果未定义,那么它的val 如何

解释是什么?

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);

变量范围是您要查找的主题。

变量my_var只存在于ajax成功调用的闭包的范围中。

如果你想在更高的级别上定义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"

所以在您的情况下:

CCD_ 3总是具有值CCD_。